blob: 8cf615ec32648dd6d313aa024173dfa857b63019 [file] [log] [blame]
Fariborz Jahanian2eb362b2012-08-10 18:10:56 +00001// RUN: %clang_cc1 -x objective-c++ -fcxx-exceptions -fsyntax-only -Werror -verify -Wno-objc-root-class %s
2// rdar://10387088
3
4@interface MyClass
5- (void)someMethod;
6@end
7
8struct BadReturn {
9 BadReturn(MyClass * myObject);
10 int bar(MyClass * myObject);
Fariborz Jahaniandbd69452012-08-10 20:34:17 +000011 void MemFunc(MyClass * myObject);
Fariborz Jahanian2eb362b2012-08-10 18:10:56 +000012 int i;
Fariborz Jahaniandbd69452012-08-10 20:34:17 +000013 MyClass *CObj;
Fariborz Jahanian2eb362b2012-08-10 18:10:56 +000014};
15
16@implementation MyClass
17- (void)someMethod {
18 [self privateMethod]; // clang already does not warn here
19}
20
21int BadReturn::bar(MyClass * myObject) {
22 [myObject privateMethod];
23 return 0;
24}
25
Fariborz Jahaniandbd69452012-08-10 20:34:17 +000026BadReturn::BadReturn(MyClass * myObject) try : CObj(myObject) {
Fariborz Jahanian2eb362b2012-08-10 18:10:56 +000027} catch(...) {
28 try {
29 [myObject privateMethod];
30 [myObject privateMethod1];
31 getMe = bar(myObject);
Fariborz Jahaniandbd69452012-08-10 20:34:17 +000032 [CObj privateMethod1];
33 } catch(int ei) {
34 i = ei;
35 } catch(...) {
36 {
37 i = 0;
38 }
39 }
40}
41
42void BadReturn::MemFunc(MyClass * myObject) try {
43} catch(...) {
44 try {
45 [myObject privateMethod];
46 [myObject privateMethod1];
47 getMe = bar(myObject);
48 [CObj privateMethod1];
Fariborz Jahanian2eb362b2012-08-10 18:10:56 +000049 } catch(int ei) {
50 i = ei;
51 } catch(...) {
52 {
53 i = 0;
54 }
55 }
56}
57
58- (void)privateMethod { }
59
60- (void)privateMethod1 {
61 getMe = getMe+1;
62}
63
64static int getMe;
65
66@end