brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 21f129f Raw
66 lines · plain
1// RUN: %clang_cc1 -x objective-c++ -fcxx-exceptions -fsyntax-only -Werror -verify -Wno-objc-root-class %s2 3@interface MyClass4- (void)someMethod;5@end6 7struct BadReturn {8  BadReturn(MyClass * myObject);9  int bar(MyClass * myObject);10  void MemFunc(MyClass * myObject);11  int i;12  MyClass *CObj;13};14 15@implementation MyClass16- (void)someMethod {17    [self privateMethod];  // clang already does not warn here18}19 20int BadReturn::bar(MyClass * myObject) {21    [myObject privateMethod];22    return 0;23}24 25BadReturn::BadReturn(MyClass * myObject) try : CObj(myObject) {26} catch(...) {27  try {28    [myObject privateMethod];29    [myObject privateMethod1];30    getMe = bar(myObject); // expected-error {{cannot refer to a non-static member from the handler of a constructor function try block}}31    [CObj privateMethod1]; // expected-error {{cannot refer to a non-static member from the handler of a constructor function try block}}32  } catch(int ei) {33    i = ei; // expected-error {{cannot refer to a non-static member from the handler of a constructor function try block}}34  } catch(...) {35    {36      i = 0; // expected-error {{cannot refer to a non-static member from the handler of a constructor function try block}}37    }38  }39}40 41void BadReturn::MemFunc(MyClass * myObject) try {42} catch(...) {43  try {44    [myObject privateMethod];45    [myObject privateMethod1];46    getMe = bar(myObject);47    [CObj privateMethod1];48  } catch(int ei) {49    i = ei;50  } catch(...) {51    {52      i = 0;53    }54  }55}56 57- (void)privateMethod { }58 59- (void)privateMethod1 {60  getMe = getMe+1;61}62 63static int getMe;64 65@end66