Rather than pushing inactive cleanups for the block captures at the entry of a full expression and activating them during the creation of the block literal, just call pushLifetimeExtendedDestroy to ensure the cleanups are popped at the end of the scope enclosing the block expression.
I've made sure that the lifetime of block captures in a return statement doesn't get extended beyond the end of the full expression except when the BlockDecl isn't in the cleanup object list of the return statement's ExprWithCleanups (see test22 I added to arc-blocks.m).
This addresses the feedback I got in the following review: https://reviews.llvm.org/D64464#inline-690623
rdar://problem/63996471