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 33int 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