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 |
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 | |