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