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 
main()239 int main() {
240   return 0;
241 }
242 
243