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 69 // rdar://13186010 70 @class NSDictionary, NSException; 71 @class NSMutableDictionary; 72 73 @interface NSString 74 + (id)stringWithFormat:(NSString *)format, ... ; 75 @end 76 77 @interface NSException 78 + (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo; 79 @end 80 id *_imp__NSInvalidArgumentException; 81 82 @interface NSSetExpression @end 83 84 @implementation NSSetExpression 85 -(id)expressionValueWithObject:(id)object context:(NSMutableDictionary*)bindings { 86 id leftSet; 87 id rightSet; 88 @throw [NSException exceptionWithName: *_imp__NSInvalidArgumentException reason: [NSString stringWithFormat: @"Can't evaluate set expression; left subexpression not a set (lhs = %@ rhs = %@)", leftSet, rightSet] userInfo: 0]; 89 90 return leftSet ; 91 } 92 @end 93 94