blob: 1564611a3a7dec11645c9f47faa59cca4fc1e57d [file] [log] [blame]
Fariborz Jahanian40539462012-03-16 16:52:06 +00001// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
Fariborz Jahanian55261af2012-03-19 18:11:32 +00002// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
3
4typedef struct objc_class *Class;
5typedef struct objc_object {
6 Class isa;
7} *id;
Fariborz Jahanian40539462012-03-16 16:52:06 +00008
9void *sel_registerName(const char *);
10
11@interface Foo @end
12void TRY();
13void SPLATCH();
14void MYTRY();
15void MYCATCH();
16
17void foo() {
18 @try { TRY(); }
19 @catch (...) { SPLATCH(); @throw; }
20}
21
22int 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
Fariborz Jahaniana09cd812013-02-11 19:30:33 +000068
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
80id *_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