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