[clang-cl] Ignore /Wv and /Wv:17 flags
[llvm-project.git] / clang / test / CodeGenObjC / arc-captured-block-var-inlined-layout.m
blob24e1beaf1824f055c00c9a3e6bea6610bc00bb55
1 // RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout
2 // RUN: FileCheck --input-file=%t-64.layout %s
3 // RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple i386-apple-darwin -print-ivar-layout -emit-llvm -o /dev/null  %s > %t-32.layout
4 // RUN: FileCheck --input-file=%t-32.layout %s
5 // rdar://12184410
7 void x(id y) {}
8 void y(int a) {}
10 extern id opaque_id(void);
12 void f(void) {
13     __block int byref_int = 0;
14     const id bar = (id) opaque_id();
15     id baz = 0;
16     __strong id strong_void_sta;
17     __block id byref_bab = (id)0;
18     __block id bl_var1;
20 // CHECK: Inline block variable layout: 0x0100, BL_STRONG:1, BL_OPERATOR:0
21     void (^b)(void) = ^{
22         x(bar);
23     };    
25 // CHECK: Inline block variable layout: 0x0210, BL_STRONG:2, BL_BYREF:1, BL_OPERATOR:0
26     void (^c)(void) = ^{
27         x(bar);
28         x(baz);
29         byref_int = 1;
30     };    
32 // CHECK: Inline block variable layout: 0x0230, BL_STRONG:2, BL_BYREF:3, BL_OPERATOR:0
33     void (^d)(void) = ^{
34         x(bar);
35         x(baz);
36         byref_int = 1;
37         bl_var1 = 0;
38         byref_bab = 0;
39     };
41 // CHECK: Inline block variable layout: 0x0231, BL_STRONG:2, BL_BYREF:3, BL_WEAK:1, BL_OPERATOR:0
42     __weak id wid;
43     id (^e)(void) = ^{
44         x(bar);
45         x(baz);
46         byref_int = 1;
47         bl_var1 = 0;
48         byref_bab = 0;
49         return wid;
50     };
52 // CHECK: Inline block variable layout: 0x0235, BL_STRONG:2, BL_BYREF:3, BL_WEAK:5, BL_OPERATOR:0
53     __weak id wid1, wid2, wid3, wid4;
54     id (^f)(void) = ^{
55         x(bar);
56         x(baz);
57         byref_int = 1;
58         bl_var1 = 0;
59         byref_bab = 0;
60         x(wid1);
61         x(wid2);
62         x(wid3);
63         x(wid4);
64         return wid;
65     };
67 // CHECK: Inline block variable layout: 0x035, BL_BYREF:3, BL_WEAK:5, BL_OPERATOR:0
68     id (^g)(void) = ^{
69         byref_int = 1;
70         bl_var1 = 0;
71         byref_bab = 0;
72         x(wid1);
73         x(wid2);
74         x(wid3);
75         x(wid4);
76         return wid;
77     };
79 // CHECK: Inline block variable layout: 0x01, BL_WEAK:1, BL_OPERATOR:0
80     id (^h)(void) = ^{
81         return wid;
82     };
84 // CHECK: Inline block variable layout: 0x020, BL_BYREF:2, BL_OPERATOR:0
85     void (^ii)(void) = ^{
86        byref_int = 1;
87        byref_bab = 0;
88     };
90 // CHECK: Inline block variable layout: 0x0102, BL_STRONG:1, BL_WEAK:2, BL_OPERATOR:0
91     void (^jj)(void) = ^{
92       x(bar);
93       x(wid1);
94       x(wid2);
95     };
98 // rdar://12752901
99 @class NSString;
100 extern void NSLog(NSString *format, ...);
101 typedef void (^dispatch_block_t)(void);
102 int main(void) {
103         __strong NSString *s1 = 0;
104         __strong NSString *s2 = 0;
105         __weak NSString *w1 = 0;
108 // CHECK: Inline block variable layout: 0x0201, BL_STRONG:2, BL_WEAK:1, BL_OPERATOR:0
109         dispatch_block_t block2 = ^{
110                 NSLog(@"%@, %@, %@", s1, w1, s2);
111         };