brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 99ab9fe Raw
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