51 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-runtime=macosx-10.7 -fexceptions -fobjc-exceptions -o - %s | FileCheck %s3 4@interface I5{6 id ivar;7}8- (id) Meth;9+ (id) MyAlloc;;10@end11 12@implementation I13- (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@end25 26// CHECK: call ptr @llvm.objc.autoreleasePoolPush27// CHECK: [[T:%.*]] = load ptr, ptr [[A:%.*]]28// CHECK: call void @llvm.objc.autoreleasePoolPop29 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(ptr40// 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 null48// CHECK: call ptr @objc_begin_catch49// CHECK-NEXT: store i32 0, ptr [[RET]]50// CHECK: call void @objc_end_catch()51