Home | History | Annotate | Download | only in CodeGenObjC
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s
      2 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s
      3 // rdar://8881826
      4 // rdar://9412038
      5 
      6 @interface I
      7 {
      8   id ivar;
      9 }
     10 - (id) Meth;
     11 + (id) MyAlloc;;
     12 @end
     13 
     14 @implementation I
     15 - (id) Meth {
     16    @autoreleasepool {
     17       id p = [I MyAlloc];
     18       if (!p)
     19         return ivar;
     20    }
     21   return 0;
     22 }
     23 + (id) MyAlloc {
     24     return 0;
     25 }
     26 @end
     27 
     28 // CHECK: call i8* @objc_autoreleasePoolPush
     29 // CHECK: [[T:%.*]] = load i8*, i8** [[A:%.*]]
     30 // CHECK: call void @objc_autoreleasePoolPop
     31 
     32 // rdar://13660038
     33 int tryTo(int (*f)(void)) {
     34   @try {
     35     @autoreleasepool {
     36       return f();
     37     }
     38   } @catch (...) {
     39     return 0;
     40   }
     41 }
     42 // CHECK-LABEL:    define i32 @tryTo(i32 ()*
     43 // CHECK:      [[RET:%.*]] = alloca i32,
     44 // CHECK:      [[T0:%.*]] = call i8* @objc_autoreleasePoolPush()
     45 // CHECK-NEXT: [[T1:%.*]] = load i32 ()*, i32 ()** {{%.*}},
     46 // CHECK-NEXT: [[T2:%.*]] = invoke i32 [[T1]]()
     47 // CHECK:      store i32 [[T2]], i32* [[RET]]
     48 // CHECK:      invoke void @objc_autoreleasePoolPop(i8* [[T0]])
     49 // CHECK:      landingpad { i8*, i32 }
     50 // CHECK-NEXT:   catch i8* null
     51 // CHECK:      call i8* @objc_begin_catch
     52 // CHECK-NEXT: store i32 0, i32* [[RET]]
     53 // CHECK:      call void @objc_end_catch()
     54