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 4@interface I 5{ 6 id ivar; 7} 8- (id) Meth; 9+ (id) MyAlloc;; 10@end 11 12@implementation I 13- (id) Meth { 14 @autoreleasepool { 15 id p = [I MyAlloc]; 16 if (!p) 17 return ivar; 18 } 19 return 0; 20} 21+ (id) MyAlloc { 22 return 0; 23} 24@end 25 26// CHECK: call ptr @llvm.objc.autoreleasePoolPush 27// CHECK: [[T:%.*]] = load ptr, ptr [[A:%.*]] 28// CHECK: call void @llvm.objc.autoreleasePoolPop 29 30int tryTo(int (*f)(void)) { 31 @try { 32 @autoreleasepool { 33 return f(); 34 } 35 } @catch (...) { 36 return 0; 37 } 38} 39// CHECK-LABEL: define{{.*}} i32 @tryTo(ptr 40// CHECK: [[RET:%.*]] = alloca i32, 41// CHECK: [[T0:%.*]] = call ptr @llvm.objc.autoreleasePoolPush() 42// CHECK-NEXT: [[T1:%.*]] = load ptr, ptr {{%.*}}, 43// CHECK-NEXT: [[T2:%.*]] = invoke i32 [[T1]]() 44// CHECK: store i32 [[T2]], ptr [[RET]] 45// CHECK: invoke void @objc_autoreleasePoolPop(ptr [[T0]]) 46// CHECK: landingpad { ptr, i32 } 47// CHECK-NEXT: catch ptr null 48// CHECK: call ptr @objc_begin_catch 49// CHECK-NEXT: store i32 0, ptr [[RET]] 50// CHECK: call void @objc_end_catch() 51