1 // RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp 2 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp 3 4 typedef struct objc_class *Class; 5 typedef struct objc_object { 6 Class isa; 7 } *id; 8 9 void *sel_registerName(const char *); 10 11 @interface Foo @end 12 void TRY(); 13 void SPLATCH(); 14 void MYTRY(); 15 void MYCATCH(); 16 17 void foo() { 18 @try { TRY(); } 19 @catch (...) { SPLATCH(); @throw; } 20 } 21 22 int main() 23 { 24 25 @try { 26 MYTRY(); 27 } 28 29 @catch (Foo* localException) { 30 MYCATCH(); 31 @throw localException; 32 } 33 34 // no catch clause 35 @try { } 36 @finally { } 37 } 38 39 40 @interface INST 41 { 42 INST* throw_val; 43 } 44 45 - (id) ThrowThis; 46 47 - (void) MainMeth; 48 49 @end 50 51 52 @implementation INST 53 - (id) ThrowThis { return 0; } 54 55 - (void) MainMeth { 56 @try { 57 MYTRY(); 58 } 59 @catch (Foo* localException) { 60 MYCATCH(); 61 @throw [self ThrowThis]; 62 } 63 @catch (...) { 64 @throw [throw_val ThrowThis]; 65 } 66 } 67 @end 68