150
|
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
|