150
|
1 // RUN: %clang_cc1 -fblocks -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout
|
|
2 // RUN: FileCheck -check-prefix=CHECK -check-prefix=CHECK-64 --input-file=%t-64.layout %s
|
|
3 // RUN: %clang_cc1 -fblocks -fobjc-runtime-has-weak -fobjc-arc -triple i386-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null %s > %t-32.layout
|
|
4 // RUN: FileCheck -check-prefix=CHECK -check-prefix=CHECK-32 --input-file=%t-32.layout %s
|
|
5 // rdar://12184410
|
|
6 // rdar://12184410
|
|
7
|
|
8 void x(id y) {}
|
|
9 void y(int a) {}
|
|
10
|
|
11 extern id opaque_id();
|
|
12 __weak id wid;
|
|
13
|
|
14 void f() {
|
|
15 __block int byref_int = 0;
|
|
16 const id bar = (id) opaque_id();
|
|
17 id baz = 0;
|
|
18 __strong id strong_void_sta;
|
|
19 __block id byref_bab = (id)0;
|
|
20 __block id bl_var1;
|
|
21
|
|
22 // block variable layout: BL_STRONG:1, BL_OPERATOR:0
|
|
23 // CHECK: Inline block variable layout: 0x0100, BL_STRONG:1, BL_OPERATOR:0
|
|
24 void (^b)() = ^{
|
|
25 x(bar);
|
|
26 };
|
|
27
|
|
28 // block variable layout: BL_STRONG:2, BL_BYREF:1, BL_OPERATOR:0
|
|
29 // CHECK: Inline block variable layout: 0x0210, BL_STRONG:2, BL_BYREF:1, BL_OPERATOR:0
|
|
30 void (^c)() = ^{
|
|
31 x(bar);
|
|
32 x(baz);
|
|
33 byref_int = 1;
|
|
34 };
|
|
35
|
|
36 // block variable layout: BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:0
|
|
37 // CHECK: Inline block variable layout: 0x0230, BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:0
|
|
38 void (^d)() = ^{
|
|
39 x(bar);
|
|
40 x(baz);
|
|
41 byref_int = 1;
|
|
42 bl_var1 = 0;
|
|
43 byref_bab = 0;
|
|
44 };
|
|
45
|
|
46 // block variable layout: BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:0
|
|
47 // CHECK: Inline block variable layout: 0x0230, BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:0
|
|
48 id (^e)() = ^{
|
|
49 x(bar);
|
|
50 x(baz);
|
|
51 byref_int = 1;
|
|
52 bl_var1 = 0;
|
|
53 byref_bab = 0;
|
|
54 return wid;
|
|
55 };
|
|
56
|
|
57 // CHECK: Inline block variable layout: 0x020, BL_BYREF:2, BL_OPERATOR:0
|
|
58 void (^ii)() = ^{
|
|
59 byref_int = 1;
|
|
60 byref_bab = 0;
|
|
61 };
|
|
62 }
|