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