[cfe-dev] Objective-C in `goto` label block.
drawtree at me.com
Mon Feb 25 05:31:15 PST 2013
Thanks for great answers!
On Feb 22, 2013, at 1:02 PM, John McCall <rjmccall at apple.com> wrote:
> On Feb 21, 2013, at 7:24 PM, Hoon Hwangbo <drawtree at me.com> wrote:
>> I am testing `goto` with Objective-C (ARC enabled).
>> And I discovered Objective-C object cannot be exist under `goto` label.
>> AA* a1; // Fine.
>> AA* a2; // Compiler error: "Expected expression".
>> Anyway it's possible to put Objective-C object in nested block.
>> AA* a1 = [AA new];
>> This makes me confused.
>> (1) Why Objective-C objects cannot be placed directly in label?
>> (2) Why it's possible in nested block?
>> (3) Is it designed or buggy behavior?
>> Can I know accurate behavior of `goto` and labels under Objective-C context?
> ARC relies on local variables of object type being initialized to nil.
> A goto which jumps into the scope of an uninitialized local variable
> could leave the function in an undefined state, causing it to crash
> when the variable goes out of scope.
> It could be argued that the compiler should implicitly zero-initialize
> such variables when performing a goto, but that's actually quite
> complicated to implement, and so the current rule is simply to ban this
> kind of jump.
> What's going on in your nested block is that you've explicitly limited
> the scope of 'a1' so that "goto LABEL1;" completely skips its scope
> instead of jumping into the middle of it.
More information about the cfe-dev