[cfe-dev] One more EH patch...
clattner at apple.com
Mon May 11 13:34:25 CDT 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.
More information about the cfe-dev