[cfe-dev] One more EH patch...

Chris Lattner clattner at apple.com
Mon May 11 11:34:25 PDT 2009


On May 9, 2009, at 6:09 AM, David Chisnall wrote:

> On 9 May 2009, at 12:40, David Chisnall wrote:
>
>> This one fixes the case where an exception is thrown inside a  
>> @catch() block (GNU runtime).
>
> And this version now emits code for @synchronized.  As with GCC,  
> this code doesn't actually work, because the required functions are  
> not present in the GNU runtime library.

Thanks David, applied.  I don't have an opinion on:

> I've also attached the test case I've been using while working on  
> this.  The following two commands should produce the same output:
>
> clang  -lobjc -fexceptions trycatch.m -g && ./a.out
> gcc -lobjc -fobjc-exceptions trycatch.m && ./a.out
>
> I don't know if someone wants to add this to the clang test suite.
>
> At the moment, clang has the same behaviour as gcc when -fexceptions  
> is not specified; it generates code which aborts at runtime if an  
> exception is thrown, rather than handling it.  Although this is the  
> same as gcc, it seems like the wrong thing to do.  We should  
> probably either:
>


> 1) Implicitly turn on -fexceptions when @try/@catch/@throw/ 
> @synchronized is encountered, or
> 2) Emit an error and let the user know at compile-time that they are  
> generating broken code.
>
> My personal preference would be (2), because all of the intervening  
> functions between the @throw and the @catch should be compiled with  
> exception support to work correctly, and it's likely that just  
> turning on exceptions for the files that throw or catch them will  
> introduce subtle failures.

#1 isn't feasible, we don't want mode settings changing depending on  
what the user wrote.  #2 makes the most sense to me.

-Chris



More information about the cfe-dev mailing list