wuhao5 added a comment.

> The specified user model of blocks is that they stay on the stack until they 
> get copied, and there can be multiple such copies.  ARC just automates that 
> process.  So the address of a block is not consistent before you've forced a 
> copy.
> 
> I tend to agree that a better user model would have been for blocks to be 
> allocated in one place, without any of this copying business, and for the 
> compiler to make an intelligent decision about stack vs. heap based on how 
> the block is used.  That's the model we've used for closures in Swift.  But 
> that  would've required the compiler to have a better ability to propagate 
> information about how the block was used, which Clang isn't really set up 
> for, and it would've required `noescape` annotations to be introduced and 
> used reliably throughout the SDK, which seemed like a big request at the 
> time.  So it's not how it works.
> 
> There is no way in the existing ABI for copying a block to cause other 
> references to the block to become references to the heap block.  We do do 
> that for `__block` variables, but not for block objects themselves.

I see - this makes sense. Right that I'd expect the compiler would know more 
about where the block is being used and make the variable consistent. my other 
worry is, although not realistically, that there can be other projects to use 
this weak/strong pointer trick to do a recursive block invocation. it becomes 
to me a bit counter-intuitive that I will need to know more about how block and 
where it should be copied, which currently we don't have to worry about it at 
all.

Right now we force an explicit copy before using it, but still like to request 
that this would be handled by Clang at some later point :)


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58514/new/

https://reviews.llvm.org/D58514



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to