[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / Rewriter / rewrite-modern-throw.m
blobe2a2acd647b608dfea0459bac515879d4e353cce
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 -std=gnu++98 -fcxx-exceptions -fexceptions  -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
4 typedef struct objc_class *Class;
5 typedef struct objc_object {
6     Class isa;
7 } *id;
9 void *sel_registerName(const char *);
11 @interface Foo @end
12 void TRY(void);
13 void SPLATCH(void);
14 void MYTRY(void);
15 void MYCATCH(void);
17 void foo(void) {
18   @try  { TRY(); } 
19   @catch (...) { SPLATCH(); @throw; }
22 int main(void)
25   @try  {
26      MYTRY();
27   }
29   @catch (Foo* localException) {
30      MYCATCH();
31      @throw localException;
32   }
33   
34   // no catch clause
35   @try { } 
36   @finally { }
40 @interface INST
42   INST* throw_val;
45 - (id) ThrowThis;
47 - (void) MainMeth;
49 @end
52 @implementation INST
53 - (id) ThrowThis { return 0; }
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   }
67 @end
69 // rdar://13186010
70 @class NSDictionary, NSException;
71 @class NSMutableDictionary;
73 @interface NSString
74 + (id)stringWithFormat:(NSString *)format, ... ;
75 @end
77 @interface  NSException
78 + (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo;
79 @end
80 id *_imp__NSInvalidArgumentException;
82 @interface NSSetExpression @end
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];
90     return leftSet ;
92 @end