blob: 6bb80fd2bd8fbd1df8640f762f2c5eef2cf74121 [file] [log] [blame]
John McCallb57f6b32013-04-16 21:29:40 +00001// 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
John McCallf85e1932011-06-15 23:02:42 +00003// 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
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070029// CHECK: [[T:%.*]] = load i8*, i8** [[A:%.*]]
John McCallf85e1932011-06-15 23:02:42 +000030// CHECK: call void @objc_autoreleasePoolPop
John McCallb57f6b32013-04-16 21:29:40 +000031
32// rdar://13660038
33int tryTo(int (*f)(void)) {
34 @try {
35 @autoreleasepool {
36 return f();
37 }
38 } @catch (...) {
39 return 0;
40 }
41}
Stephen Lin93ab6bf2013-08-15 06:47:53 +000042// CHECK-LABEL: define i32 @tryTo(i32 ()*
John McCallb57f6b32013-04-16 21:29:40 +000043// CHECK: [[RET:%.*]] = alloca i32,
44// CHECK: [[T0:%.*]] = call i8* @objc_autoreleasePoolPush()
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -070045// CHECK-NEXT: [[T1:%.*]] = load i32 ()*, i32 ()** {{%.*}},
John McCallb57f6b32013-04-16 21:29:40 +000046// 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 } personality
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()