1 | // RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin9 %s | FileCheck %s |
2 | // RUN: %clang_cc1 -emit-llvm -o - -triple thumbv7-apple-ios -target-abi apcs-gnu %s | FileCheck %s -check-prefix=CHECK-ARM |
3 | |
4 | // rdar://8823265 |
5 | |
6 | // Note that we're declaring global variables with these types, |
7 | // triggering both Sema and IRGen struct layout. |
8 | |
9 | #define ATTR __attribute__((__ms_struct__)) |
10 | |
11 | struct |
12 | { |
13 | char foo; |
14 | long : 0; |
15 | char bar; |
16 | } ATTR t1; |
17 | int s1 = sizeof(t1); |
18 | // CHECK: @s1 = global i32 2 |
19 | // CHECK-ARM: @s1 = global i32 2 |
20 | |
21 | struct |
22 | { |
23 | char foo; |
24 | long : 0; |
25 | char : 0; |
26 | int : 0; |
27 | char bar; |
28 | } ATTR t2; |
29 | int s2 = sizeof(t2); |
30 | // CHECK: @s2 = global i32 2 |
31 | // CHECK-ARM: @s2 = global i32 2 |
32 | |
33 | struct |
34 | { |
35 | char foo; |
36 | long : 0; |
37 | char : 0; |
38 | int : 0; |
39 | char bar; |
40 | long : 0; |
41 | char : 0; |
42 | } ATTR t3; |
43 | int s3 = sizeof(t3); |
44 | // CHECK: @s3 = global i32 2 |
45 | // CHECK-ARM: @s3 = global i32 2 |
46 | |
47 | struct |
48 | { |
49 | long : 0; |
50 | char bar; |
51 | } ATTR t4; |
52 | int s4 = sizeof(t4); |
53 | // CHECK: @s4 = global i32 1 |
54 | // CHECK-ARM: @s4 = global i32 1 |
55 | |
56 | struct |
57 | { |
58 | long : 0; |
59 | long : 0; |
60 | char : 0; |
61 | char bar; |
62 | } ATTR t5; |
63 | int s5 = sizeof(t5); |
64 | // CHECK: @s5 = global i32 1 |
65 | // CHECK-ARM: @s5 = global i32 1 |
66 | |
67 | struct |
68 | { |
69 | long : 0; |
70 | long : 0; |
71 | char : 0; |
72 | char bar; |
73 | } ATTR t6; |
74 | int s6 = sizeof(t6); |
75 | // CHECK: @s6 = global i32 1 |
76 | // CHECK-ARM: @s6 = global i32 1 |
77 | |
78 | struct |
79 | { |
80 | char foo; |
81 | long : 0; |
82 | int : 0; |
83 | char bar; |
84 | char bar1; |
85 | long : 0; |
86 | char bar2; |
87 | char bar3; |
88 | char : 0; |
89 | char bar4; |
90 | char bar5; |
91 | char : 0; |
92 | char bar6; |
93 | char bar7; |
94 | } ATTR t7; |
95 | int s7 = sizeof(t7); |
96 | // CHECK: @s7 = global i32 9 |
97 | // CHECK-ARM: @s7 = global i32 9 |
98 | |
99 | struct |
100 | { |
101 | long : 0; |
102 | long : 0; |
103 | char : 0; |
104 | } ATTR t8; |
105 | int s8 = sizeof(t8); |
106 | // CHECK: @s8 = global i32 0 |
107 | // CHECK-ARM: @s8 = global i32 0 |
108 | |
109 | struct |
110 | { |
111 | char foo; |
112 | long : 0; |
113 | int : 0; |
114 | char bar; |
115 | char bar1; |
116 | long : 0; |
117 | char bar2; |
118 | char bar3; |
119 | char : 0; |
120 | char bar4; |
121 | char bar5; |
122 | char : 0; |
123 | char bar6; |
124 | char bar7; |
125 | int i1; |
126 | char : 0; |
127 | long : 0; |
128 | char :4; |
129 | char bar8; |
130 | char : 0; |
131 | char bar9; |
132 | char bar10; |
133 | int i2; |
134 | char : 0; |
135 | long : 0; |
136 | char :4; |
137 | } ATTR t9; |
138 | int s9 = sizeof(t9); |
139 | // CHECK: @s9 = global i32 28 |
140 | // CHECK-ARM: @s9 = global i32 28 |
141 | |
142 | struct |
143 | { |
144 | char foo: 8; |
145 | long : 0; |
146 | char bar; |
147 | } ATTR t10; |
148 | int s10 = sizeof(t10); |
149 | // CHECK: @s10 = global i32 16 |
150 | // CHECK-ARM: @s10 = global i32 8 |
151 | |
152 | // rdar://16041826 - ensure that ms_structs work correctly on a |
153 | // !useBitFieldTypeAlignment() target |
154 | struct { |
155 | unsigned int a : 31; |
156 | unsigned int b : 2; |
157 | unsigned int c; |
158 | } ATTR t11; |
159 | int s11 = sizeof(t11); |
160 | // CHECK: @s11 = global i32 12 |
161 | // CHECK-ARM: @s11 = global i32 12 |
162 | |
163 | struct { |
164 | unsigned char a : 3; |
165 | unsigned char b : 4; |
166 | unsigned short c : 6; |
167 | } ATTR t12; |
168 | int s12 = sizeof(t12); |
169 | // CHECK: @s12 = global i32 4 |
170 | // CHECK-ARM: @s12 = global i32 4 |
171 | |
172 | struct { |
173 | unsigned char a : 3; |
174 | unsigned char b : 4; |
175 | __attribute__((packed)) unsigned short c : 6; |
176 | } ATTR t13; |
177 | int s13 = sizeof(t13); |
178 | // CHECK: @s13 = global i32 4 |
179 | // CHECK-ARM: @s13 = global i32 4 |
180 | |