1 | // REQUIRES: arm-registered-target |
2 | // RUN: %clang_cc1 -target-abi apcs-gnu -triple armv7-apple-darwin10 %s -verify |
3 | // expected-no-diagnostics |
4 | // |
5 | // Note: gcc forces the alignment to 4 bytes, regardless of the type of the |
6 | // zero length bitfield. |
7 | // rdar://9859156 |
8 | |
9 | #include <stddef.h> |
10 | |
11 | struct t1 |
12 | { |
13 | int foo : 1; |
14 | char : 0; |
15 | char bar; |
16 | }; |
17 | static int arr1_offset[(offsetof(struct t1, bar) == 4) ? 0 : -1]; |
18 | static int arr1_sizeof[(sizeof(struct t1) == 8) ? 0 : -1]; |
19 | |
20 | struct t2 |
21 | { |
22 | int foo : 1; |
23 | short : 0; |
24 | char bar; |
25 | }; |
26 | static int arr2_offset[(offsetof(struct t2, bar) == 4) ? 0 : -1]; |
27 | static int arr2_sizeof[(sizeof(struct t2) == 8) ? 0 : -1]; |
28 | |
29 | struct t3 |
30 | { |
31 | int foo : 1; |
32 | int : 0; |
33 | char bar; |
34 | }; |
35 | static int arr3_offset[(offsetof(struct t3, bar) == 4) ? 0 : -1]; |
36 | static int arr3_sizeof[(sizeof(struct t3) == 8) ? 0 : -1]; |
37 | |
38 | struct t4 |
39 | { |
40 | int foo : 1; |
41 | long : 0; |
42 | char bar; |
43 | }; |
44 | static int arr4_offset[(offsetof(struct t4, bar) == 4) ? 0 : -1]; |
45 | static int arr4_sizeof[(sizeof(struct t4) == 8) ? 0 : -1]; |
46 | |
47 | struct t5 |
48 | { |
49 | int foo : 1; |
50 | long long : 0; |
51 | char bar; |
52 | }; |
53 | static int arr5_offset[(offsetof(struct t5, bar) == 4) ? 0 : -1]; |
54 | static int arr5_sizeof[(sizeof(struct t5) == 8) ? 0 : -1]; |
55 | |
56 | struct t6 |
57 | { |
58 | int foo : 1; |
59 | char : 0; |
60 | char bar : 1; |
61 | char bar2; |
62 | }; |
63 | static int arr6_offset[(offsetof(struct t6, bar2) == 5) ? 0 : -1]; |
64 | static int arr6_sizeof[(sizeof(struct t6) == 8) ? 0 : -1]; |
65 | |
66 | struct t7 |
67 | { |
68 | int foo : 1; |
69 | short : 0; |
70 | char bar1 : 1; |
71 | char bar2; |
72 | }; |
73 | static int arr7_offset[(offsetof(struct t7, bar2) == 5) ? 0 : -1]; |
74 | static int arr7_sizeof[(sizeof(struct t7) == 8) ? 0 : -1]; |
75 | |
76 | struct t8 |
77 | { |
78 | int foo : 1; |
79 | int : 0; |
80 | char bar1 : 1; |
81 | char bar2; |
82 | }; |
83 | static int arr8_offset[(offsetof(struct t8, bar2) == 5) ? 0 : -1]; |
84 | static int arr8_sizeof[(sizeof(struct t8) == 8) ? 0 : -1]; |
85 | |
86 | struct t9 |
87 | { |
88 | int foo : 1; |
89 | long : 0; |
90 | char bar1 : 1; |
91 | char bar2; |
92 | }; |
93 | static int arr9_offset[(offsetof(struct t9, bar2) == 5) ? 0 : -1]; |
94 | static int arr9_sizeof[(sizeof(struct t9) == 8) ? 0 : -1]; |
95 | |
96 | struct t10 |
97 | { |
98 | int foo : 1; |
99 | long long : 0; |
100 | char bar1 : 1; |
101 | char bar2; |
102 | }; |
103 | static int arr10_offset[(offsetof(struct t10, bar2) == 5) ? 0 : -1]; |
104 | static int arr10_sizeof[(sizeof(struct t10) == 8) ? 0 : -1]; |
105 | |
106 | struct t11 |
107 | { |
108 | int foo : 1; |
109 | long long : 0; |
110 | char : 0; |
111 | char bar1 : 1; |
112 | char bar2; |
113 | }; |
114 | static int arr11_offset[(offsetof(struct t11, bar2) == 5) ? 0 : -1]; |
115 | static int arr11_sizeof[(sizeof(struct t11) == 8) ? 0 : -1]; |
116 | |
117 | struct t12 |
118 | { |
119 | int foo : 1; |
120 | char : 0; |
121 | long long : 0; |
122 | char : 0; |
123 | char bar; |
124 | }; |
125 | static int arr12_offset[(offsetof(struct t12, bar) == 4) ? 0 : -1]; |
126 | static int arr12_sizeof[(sizeof(struct t12) == 8) ? 0 : -1]; |
127 | |
128 | struct t13 |
129 | { |
130 | char foo; |
131 | long : 0; |
132 | char bar; |
133 | }; |
134 | static int arr13_offset[(offsetof(struct t13, bar) == 4) ? 0 : -1]; |
135 | static int arr13_sizeof[(sizeof(struct t13) == 8) ? 0 : -1]; |
136 | |
137 | struct t14 |
138 | { |
139 | char foo1; |
140 | int : 0; |
141 | char foo2 : 1; |
142 | short foo3 : 16; |
143 | char : 0; |
144 | short foo4 : 16; |
145 | char bar1; |
146 | int : 0; |
147 | char bar2; |
148 | }; |
149 | static int arr14_bar1_offset[(offsetof(struct t14, bar1) == 10) ? 0 : -1]; |
150 | static int arr14_bar2_offset[(offsetof(struct t14, bar2) == 12) ? 0 : -1]; |
151 | static int arr14_sizeof[(sizeof(struct t14) == 16) ? 0 : -1]; |
152 | |
153 | struct t15 |
154 | { |
155 | char foo; |
156 | char : 0; |
157 | int : 0; |
158 | char bar; |
159 | long : 0; |
160 | char : 0; |
161 | }; |
162 | static int arr15_offset[(offsetof(struct t15, bar) == 4) ? 0 : -1]; |
163 | static int arr15_sizeof[(sizeof(struct t15) == 8) ? 0 : -1]; |
164 | |
165 | struct t16 |
166 | { |
167 | long : 0; |
168 | char bar; |
169 | }; |
170 | static int arr16_offset[(offsetof(struct t16, bar) == 0) ? 0 : -1]; |
171 | static int arr16_sizeof[(sizeof(struct t16) == 4) ? 0 : -1]; |
172 | |
173 | struct t17 |
174 | { |
175 | char foo; |
176 | long : 0; |
177 | long : 0; |
178 | char : 0; |
179 | char bar; |
180 | }; |
181 | static int arr17_offset[(offsetof(struct t17, bar) == 4) ? 0 : -1]; |
182 | static int arr17_sizeof[(sizeof(struct t17) == 8) ? 0 : -1]; |
183 | |
184 | struct t18 |
185 | { |
186 | long : 0; |
187 | long : 0; |
188 | char : 0; |
189 | }; |
190 | static int arr18_sizeof[(sizeof(struct t18) == 0) ? 0 : -1]; |
191 | |
192 | struct t19 |
193 | { |
194 | char foo1; |
195 | long foo2 : 1; |
196 | char : 0; |
197 | long foo3 : 32; |
198 | char bar; |
199 | }; |
200 | static int arr19_offset[(offsetof(struct t19, bar) == 8) ? 0 : -1]; |
201 | static int arr19_sizeof[(sizeof(struct t19) == 12) ? 0 : -1]; |
202 | |
203 | struct t20 |
204 | { |
205 | short : 0; |
206 | int foo : 1; |
207 | long : 0; |
208 | char bar; |
209 | }; |
210 | static int arr20_offset[(offsetof(struct t20, bar) == 4) ? 0 : -1]; |
211 | static int arr20_sizeof[(sizeof(struct t20) == 8) ? 0 : -1]; |
212 | |
213 | struct t21 |
214 | { |
215 | short : 0; |
216 | int foo1 : 1; |
217 | char : 0; |
218 | int foo2 : 16; |
219 | long : 0; |
220 | char bar1; |
221 | int bar2; |
222 | long bar3; |
223 | char foo3 : 8; |
224 | char : 0; |
225 | long : 0; |
226 | int foo4 : 32; |
227 | short foo5: 1; |
228 | long bar4; |
229 | short foo6: 16; |
230 | short foo7: 16; |
231 | short foo8: 16; |
232 | }; |
233 | static int arr21_bar1_offset[(offsetof(struct t21, bar1) == 8) ? 0 : -1]; |
234 | static int arr21_bar2_offset[(offsetof(struct t21, bar2) == 12) ? 0 : -1]; |
235 | static int arr21_bar3_offset[(offsetof(struct t21, bar3) == 16) ? 0 : -1]; |
236 | static int arr21_bar4_offset[(offsetof(struct t21, bar4) == 32) ? 0 : -1]; |
237 | static int arr21_sizeof[(sizeof(struct t21) == 44) ? 0 : -1]; |
238 | |
239 | int main() { |
240 | return 0; |
241 | } |
242 | |
243 | |