Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CodeGenObjC / autorelease.m
blob99ab9fe2de898c2389c20a4055ef6add3bf1b276
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
4 @interface I
6   id ivar;
8 - (id) Meth;
9 + (id) MyAlloc;;
10 @end
12 @implementation I
13 - (id) Meth {
14    @autoreleasepool {
15       id p = [I MyAlloc];
16       if (!p)
17         return ivar;
18    }
19   return 0;
21 + (id) MyAlloc {
22     return 0;
24 @end
26 // CHECK: call ptr @llvm.objc.autoreleasePoolPush
27 // CHECK: [[T:%.*]] = load ptr, ptr [[A:%.*]]
28 // CHECK: call void @llvm.objc.autoreleasePoolPop
30 int tryTo(int (*f)(void)) {
31   @try {
32     @autoreleasepool {
33       return f();
34     }
35   } @catch (...) {
36     return 0;
37   }
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()