[cfe-dev] ARC + goto into protected scope error

Jordan Rose jordan_rose at apple.com
Thu Aug 16 18:58:15 PDT 2012


Note that (IIRC) goto can /leave/ a protected scope, so you can also just put one set of braces around the /rest/ of your function, and only leave the cleanup code outside. You won't need to nest new braces after every goto.


On Aug 16, 2012, at 18:56 , Jordan Rose <jordan_rose at apple.com> wrote:

> If you put the variable in its own scope, preventing accidental access, you won't get the error:
> 
> int main() {
>  goto cleanup;
>  {
>     NSString *str;
>  }
> cleanup:
>  return 0;
> }
> 
> If you don't do this, you bypass the zero-initialization of 'str', and when ARC tries to clean it up, it'll end up trying to release some random bit of memory.
> 
> This should handle any valid case; if you want to use 'goto' but can't enclose the variables in their own scope, you'll have to move the declarations before the goto (as K&R intended *grin*).
> 
> Jordan
> 
> 
> On Aug 16, 2012, at 18:47 , Dave Keck <davekeck at gmail.com> wrote:
> 
>> Hi all,
>> 
>> I use the "check for success/goto failed" pattern everywhere, but
>> Clang refuses to compile such code with ARC enabled if the goto
>> bypasses a variable declaration (giving a "goto into protected scope"
>> error.)
>> 
>> Is this something that's likely to be fixed? Compiling the program
>> below triggers the error.
>> 
>>   // compile with: clang -framework Foundation -fobjc-arc <file>.m
>>   #import <Foundation/Foundation.h>
>>   int main() {
>>       goto cleanup;
>>       NSString *str;
>>       cleanup:
>>       return 0;
>>   }
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> 




More information about the cfe-dev mailing list