On Mar 1, 2009, at 11:06 AM, Mike Stump wrote:

> On Mar 1, 2009, at 10:55 AM, Anders Carlsson wrote:
>> __block variables don't work. For example
>>
>> void f()
>> {
>> __block int a = 10;
>>
>> ^{
>>   a = 20;
>> }();
>>
>> printf("a is: %d\n", a);
>> }
>>
>> does not work as expected.
>
> Do you expect something different?  :-(

I did not! :) That's good news!

However, __block variables are still allocated on the stack, even when  
copied. For example:

int
main(int argc, char **argv)
{
     __block int a;
     printf("a is: %p\n", &a);
     Block_copy(^{ printf("block: a is: %p\n", &a);})();

     return 0;
}

gives

a is: 0x7fff5fbff7a0
block: a is: 0x1001001b8

with llvm-gcc, but

a is: 0x7fff5fbff7fc
block: a is: 0x7fff5fbff7fc

with clang. I'd rather that we error on __block variables instead of  
miscompiling.

Anders



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to