1 | // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>&1 \ |
2 | // RUN: | FileCheck %s |
3 | // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \ |
4 | // RUN: | FileCheck %s -check-prefix CHECK-X64 |
5 | |
6 | extern "C" int printf(const char *fmt, ...); |
7 | |
8 | struct B0 { int a; B0() : a(0xf00000B0) {} }; |
9 | struct B1 { char a; B1() : a(0xB1) {} }; |
10 | struct B2 : virtual B1 { int a; B2() : a(0xf00000B2) {} }; |
11 | struct B3 { __declspec(align(16)) int a; B3() : a(0xf00000B3) {} }; |
12 | struct B4 : virtual B3 { int a; B4() : a(0xf00000B4) {} }; |
13 | struct B5 { __declspec(align(32)) int a; B5() : a(0xf00000B5) {} }; |
14 | struct B6 { int a; B6() : a(0xf00000B6) {} virtual void f() { printf("B6"); } }; |
15 | |
16 | struct A : B0, virtual B1 { __declspec(align(16)) int a; A() : a(0xf000000A) {} virtual void f() { printf("A"); } }; |
17 | |
18 | // CHECK: *** Dumping AST Record Layout |
19 | // CHECK: *** Dumping AST Record Layout |
20 | // CHECK: *** Dumping AST Record Layout |
21 | // CHECK-NEXT: 0 | struct A |
22 | // CHECK-NEXT: 0 | (A vftable pointer) |
23 | // CHECK-NEXT: 16 | struct B0 (base) |
24 | // CHECK-NEXT: 16 | int a |
25 | // CHECK-NEXT: 20 | (A vbtable pointer) |
26 | // CHECK-NEXT: 48 | int a |
27 | // CHECK-NEXT: 64 | struct B1 (virtual base) |
28 | // CHECK-NEXT: 64 | char a |
29 | // CHECK-NEXT: | [sizeof=80, align=16 |
30 | // CHECK-NEXT: | nvsize=64, nvalign=16] |
31 | // CHECK-X64: *** Dumping AST Record Layout |
32 | // CHECK-X64: *** Dumping AST Record Layout |
33 | // CHECK-X64: *** Dumping AST Record Layout |
34 | // CHECK-X64-NEXT: 0 | struct A |
35 | // CHECK-X64-NEXT: 0 | (A vftable pointer) |
36 | // CHECK-X64-NEXT: 16 | struct B0 (base) |
37 | // CHECK-X64-NEXT: 16 | int a |
38 | // CHECK-X64-NEXT: 24 | (A vbtable pointer) |
39 | // CHECK-X64-NEXT: 48 | int a |
40 | // CHECK-X64-NEXT: 64 | struct B1 (virtual base) |
41 | // CHECK-X64-NEXT: 64 | char a |
42 | // CHECK-X64-NEXT: | [sizeof=80, align=16 |
43 | // CHECK-X64-NEXT: | nvsize=64, nvalign=16] |
44 | |
45 | struct B : A, B2 { int a; B() : a(0xf000000B) {} virtual void f() { printf("B"); } }; |
46 | |
47 | // CHECK: *** Dumping AST Record Layout |
48 | // CHECK: *** Dumping AST Record Layout |
49 | // CHECK-NEXT: 0 | struct B |
50 | // CHECK-NEXT: 0 | struct A (primary base) |
51 | // CHECK-NEXT: 0 | (A vftable pointer) |
52 | // CHECK-NEXT: 16 | struct B0 (base) |
53 | // CHECK-NEXT: 16 | int a |
54 | // CHECK-NEXT: 20 | (A vbtable pointer) |
55 | // CHECK-NEXT: 48 | int a |
56 | // CHECK-NEXT: 64 | struct B2 (base) |
57 | // CHECK-NEXT: 64 | (B2 vbtable pointer) |
58 | // CHECK-NEXT: 68 | int a |
59 | // CHECK-NEXT: 72 | int a |
60 | // CHECK-NEXT: 80 | struct B1 (virtual base) |
61 | // CHECK-NEXT: 80 | char a |
62 | // CHECK-NEXT: | [sizeof=96, align=16 |
63 | // CHECK-NEXT: | nvsize=80, nvalign=16] |
64 | // CHECK-X64: *** Dumping AST Record Layout |
65 | // CHECK-X64: *** Dumping AST Record Layout |
66 | // CHECK-X64-NEXT: 0 | struct B |
67 | // CHECK-X64-NEXT: 0 | struct A (primary base) |
68 | // CHECK-X64-NEXT: 0 | (A vftable pointer) |
69 | // CHECK-X64-NEXT: 16 | struct B0 (base) |
70 | // CHECK-X64-NEXT: 16 | int a |
71 | // CHECK-X64-NEXT: 24 | (A vbtable pointer) |
72 | // CHECK-X64-NEXT: 48 | int a |
73 | // CHECK-X64-NEXT: 64 | struct B2 (base) |
74 | // CHECK-X64-NEXT: 64 | (B2 vbtable pointer) |
75 | // CHECK-X64-NEXT: 72 | int a |
76 | // CHECK-X64-NEXT: 80 | int a |
77 | // CHECK-X64-NEXT: 96 | struct B1 (virtual base) |
78 | // CHECK-X64-NEXT: 96 | char a |
79 | // CHECK-X64-NEXT: | [sizeof=112, align=16 |
80 | // CHECK-X64-NEXT: | nvsize=96, nvalign=16] |
81 | |
82 | struct C : B4 { int a; C() : a(0xf000000C) {} virtual void f() { printf("C"); } }; |
83 | |
84 | // CHECK: *** Dumping AST Record Layout |
85 | // CHECK: *** Dumping AST Record Layout |
86 | // CHECK: *** Dumping AST Record Layout |
87 | // CHECK-NEXT: 0 | struct C |
88 | // CHECK-NEXT: 0 | (C vftable pointer) |
89 | // CHECK-NEXT: 16 | struct B4 (base) |
90 | // CHECK-NEXT: 16 | (B4 vbtable pointer) |
91 | // CHECK-NEXT: 20 | int a |
92 | // CHECK-NEXT: 24 | int a |
93 | // CHECK-NEXT: 32 | struct B3 (virtual base) |
94 | // CHECK-NEXT: 32 | int a |
95 | // CHECK-NEXT: | [sizeof=48, align=16 |
96 | // CHECK-NEXT: | nvsize=32, nvalign=16] |
97 | // CHECK-X64: *** Dumping AST Record Layout |
98 | // CHECK-X64: *** Dumping AST Record Layout |
99 | // CHECK-X64: *** Dumping AST Record Layout |
100 | // CHECK-X64-NEXT: 0 | struct C |
101 | // CHECK-X64-NEXT: 0 | (C vftable pointer) |
102 | // CHECK-X64-NEXT: 16 | struct B4 (base) |
103 | // CHECK-X64-NEXT: 16 | (B4 vbtable pointer) |
104 | // CHECK-X64-NEXT: 24 | int a |
105 | // CHECK-X64-NEXT: 32 | int a |
106 | // CHECK-X64-NEXT: 48 | struct B3 (virtual base) |
107 | // CHECK-X64-NEXT: 48 | int a |
108 | // CHECK-X64-NEXT: | [sizeof=64, align=16 |
109 | // CHECK-X64-NEXT: | nvsize=48, nvalign=16] |
110 | |
111 | struct D : C { int a; D() : a(0xf000000D) {} virtual void f() { printf("D"); } }; |
112 | |
113 | // CHECK: *** Dumping AST Record Layout |
114 | // CHECK-NEXT: 0 | struct D |
115 | // CHECK-NEXT: 0 | struct C (primary base) |
116 | // CHECK-NEXT: 0 | (C vftable pointer) |
117 | // CHECK-NEXT: 16 | struct B4 (base) |
118 | // CHECK-NEXT: 16 | (B4 vbtable pointer) |
119 | // CHECK-NEXT: 20 | int a |
120 | // CHECK-NEXT: 24 | int a |
121 | // CHECK-NEXT: 32 | int a |
122 | // CHECK-NEXT: 48 | struct B3 (virtual base) |
123 | // CHECK-NEXT: 48 | int a |
124 | // CHECK-NEXT: | [sizeof=64, align=16 |
125 | // CHECK-NEXT: | nvsize=48, nvalign=16] |
126 | // CHECK-X64: *** Dumping AST Record Layout |
127 | // CHECK-X64-NEXT: 0 | struct D |
128 | // CHECK-X64-NEXT: 0 | struct C (primary base) |
129 | // CHECK-X64-NEXT: 0 | (C vftable pointer) |
130 | // CHECK-X64-NEXT: 16 | struct B4 (base) |
131 | // CHECK-X64-NEXT: 16 | (B4 vbtable pointer) |
132 | // CHECK-X64-NEXT: 24 | int a |
133 | // CHECK-X64-NEXT: 32 | int a |
134 | // CHECK-X64-NEXT: 48 | int a |
135 | // CHECK-X64-NEXT: 64 | struct B3 (virtual base) |
136 | // CHECK-X64-NEXT: 64 | int a |
137 | // CHECK-X64-NEXT: | [sizeof=80, align=16 |
138 | // CHECK-X64-NEXT: | nvsize=64, nvalign=16] |
139 | |
140 | struct E : virtual C { int a; E() : a(0xf000000E) {} virtual void f() { printf("E"); } }; |
141 | |
142 | // CHECK: *** Dumping AST Record Layout |
143 | // CHECK-NEXT: 0 | struct E |
144 | // CHECK-NEXT: 0 | (E vbtable pointer) |
145 | // CHECK-NEXT: 4 | int a |
146 | // CHECK-NEXT: 16 | struct B3 (virtual base) |
147 | // CHECK-NEXT: 16 | int a |
148 | // CHECK-NEXT: 44 | (vtordisp for vbase C) |
149 | // CHECK-NEXT: 48 | struct C (virtual base) |
150 | // CHECK-NEXT: 48 | (C vftable pointer) |
151 | // CHECK-NEXT: 64 | struct B4 (base) |
152 | // CHECK-NEXT: 64 | (B4 vbtable pointer) |
153 | // CHECK-NEXT: 68 | int a |
154 | // CHECK-NEXT: 72 | int a |
155 | // CHECK-NEXT: | [sizeof=80, align=16 |
156 | // CHECK-NEXT: | nvsize=8, nvalign=16] |
157 | // CHECK-X64: *** Dumping AST Record Layout |
158 | // CHECK-X64-NEXT: 0 | struct E |
159 | // CHECK-X64-NEXT: 0 | (E vbtable pointer) |
160 | // CHECK-X64-NEXT: 8 | int a |
161 | // CHECK-X64-NEXT: 16 | struct B3 (virtual base) |
162 | // CHECK-X64-NEXT: 16 | int a |
163 | // CHECK-X64-NEXT: 44 | (vtordisp for vbase C) |
164 | // CHECK-X64-NEXT: 48 | struct C (virtual base) |
165 | // CHECK-X64-NEXT: 48 | (C vftable pointer) |
166 | // CHECK-X64-NEXT: 64 | struct B4 (base) |
167 | // CHECK-X64-NEXT: 64 | (B4 vbtable pointer) |
168 | // CHECK-X64-NEXT: 72 | int a |
169 | // CHECK-X64-NEXT: 80 | int a |
170 | // CHECK-X64-NEXT: | [sizeof=96, align=16 |
171 | // CHECK-X64-NEXT: | nvsize=16, nvalign=16] |
172 | |
173 | struct F : B3, virtual B0 { int a; F() : a(0xf000000F) {} virtual void f() { printf("F"); } }; |
174 | |
175 | // CHECK: *** Dumping AST Record Layout |
176 | // CHECK-NEXT: 0 | struct F |
177 | // CHECK-NEXT: 0 | (F vftable pointer) |
178 | // CHECK-NEXT: 16 | struct B3 (base) |
179 | // CHECK-NEXT: 16 | int a |
180 | // CHECK-NEXT: 32 | (F vbtable pointer) |
181 | // CHECK-NEXT: 48 | int a |
182 | // CHECK-NEXT: 64 | struct B0 (virtual base) |
183 | // CHECK-NEXT: 64 | int a |
184 | // CHECK-NEXT: | [sizeof=80, align=16 |
185 | // CHECK-NEXT: | nvsize=64, nvalign=16] |
186 | // CHECK-X64: *** Dumping AST Record Layout |
187 | // CHECK-X64-NEXT: 0 | struct F |
188 | // CHECK-X64-NEXT: 0 | (F vftable pointer) |
189 | // CHECK-X64-NEXT: 16 | struct B3 (base) |
190 | // CHECK-X64-NEXT: 16 | int a |
191 | // CHECK-X64-NEXT: 32 | (F vbtable pointer) |
192 | // CHECK-X64-NEXT: 48 | int a |
193 | // CHECK-X64-NEXT: 64 | struct B0 (virtual base) |
194 | // CHECK-X64-NEXT: 64 | int a |
195 | // CHECK-X64-NEXT: | [sizeof=80, align=16 |
196 | // CHECK-X64-NEXT: | nvsize=64, nvalign=16] |
197 | |
198 | struct G : B2, B6, virtual B1 { int a; G() : a(0xf0000010) {} }; |
199 | |
200 | // CHECK: *** Dumping AST Record Layout |
201 | // CHECK: *** Dumping AST Record Layout |
202 | // CHECK-NEXT: 0 | struct G |
203 | // CHECK-NEXT: 0 | struct B6 (primary base) |
204 | // CHECK-NEXT: 0 | (B6 vftable pointer) |
205 | // CHECK-NEXT: 4 | int a |
206 | // CHECK-NEXT: 8 | struct B2 (base) |
207 | // CHECK-NEXT: 8 | (B2 vbtable pointer) |
208 | // CHECK-NEXT: 12 | int a |
209 | // CHECK-NEXT: 16 | int a |
210 | // CHECK-NEXT: 20 | struct B1 (virtual base) |
211 | // CHECK-NEXT: 20 | char a |
212 | // CHECK-NEXT: | [sizeof=21, align=4 |
213 | // CHECK-NEXT: | nvsize=20, nvalign=4] |
214 | // CHECK-X64: *** Dumping AST Record Layout |
215 | // CHECK-X64: *** Dumping AST Record Layout |
216 | // CHECK-X64-NEXT: 0 | struct G |
217 | // CHECK-X64-NEXT: 0 | struct B6 (primary base) |
218 | // CHECK-X64-NEXT: 0 | (B6 vftable pointer) |
219 | // CHECK-X64-NEXT: 8 | int a |
220 | // CHECK-X64-NEXT: 16 | struct B2 (base) |
221 | // CHECK-X64-NEXT: 16 | (B2 vbtable pointer) |
222 | // CHECK-X64-NEXT: 24 | int a |
223 | // CHECK-X64-NEXT: 32 | int a |
224 | // CHECK-X64-NEXT: 40 | struct B1 (virtual base) |
225 | // CHECK-X64-NEXT: 40 | char a |
226 | // CHECK-X64-NEXT: | [sizeof=48, align=8 |
227 | // CHECK-X64-NEXT: | nvsize=40, nvalign=8] |
228 | |
229 | struct H : B6, B2, virtual B1 { int a; H() : a(0xf0000011) {} }; |
230 | |
231 | // CHECK: *** Dumping AST Record Layout |
232 | // CHECK-NEXT: 0 | struct H |
233 | // CHECK-NEXT: 0 | struct B6 (primary base) |
234 | // CHECK-NEXT: 0 | (B6 vftable pointer) |
235 | // CHECK-NEXT: 4 | int a |
236 | // CHECK-NEXT: 8 | struct B2 (base) |
237 | // CHECK-NEXT: 8 | (B2 vbtable pointer) |
238 | // CHECK-NEXT: 12 | int a |
239 | // CHECK-NEXT: 16 | int a |
240 | // CHECK-NEXT: 20 | struct B1 (virtual base) |
241 | // CHECK-NEXT: 20 | char a |
242 | // CHECK-NEXT: | [sizeof=21, align=4 |
243 | // CHECK-NEXT: | nvsize=20, nvalign=4] |
244 | // CHECK-X64: *** Dumping AST Record Layout |
245 | // CHECK-X64-NEXT: 0 | struct H |
246 | // CHECK-X64-NEXT: 0 | struct B6 (primary base) |
247 | // CHECK-X64-NEXT: 0 | (B6 vftable pointer) |
248 | // CHECK-X64-NEXT: 8 | int a |
249 | // CHECK-X64-NEXT: 16 | struct B2 (base) |
250 | // CHECK-X64-NEXT: 16 | (B2 vbtable pointer) |
251 | // CHECK-X64-NEXT: 24 | int a |
252 | // CHECK-X64-NEXT: 32 | int a |
253 | // CHECK-X64-NEXT: 40 | struct B1 (virtual base) |
254 | // CHECK-X64-NEXT: 40 | char a |
255 | // CHECK-X64-NEXT: | [sizeof=48, align=8 |
256 | // CHECK-X64-NEXT: | nvsize=40, nvalign=8] |
257 | |
258 | struct I : B0, virtual B1 { int a; int a1; __declspec(align(16)) int a2; I() : a(0xf0000011), a1(0xf0000011), a2(0xf0000011) {} }; |
259 | |
260 | // CHECK: *** Dumping AST Record Layout |
261 | // CHECK-NEXT: 0 | struct I |
262 | // CHECK-NEXT: 0 | struct B0 (base) |
263 | // CHECK-NEXT: 0 | int a |
264 | // CHECK-NEXT: 4 | (I vbtable pointer) |
265 | // CHECK-NEXT: 20 | int a |
266 | // CHECK-NEXT: 24 | int a1 |
267 | // CHECK-NEXT: 32 | int a2 |
268 | // CHECK-NEXT: 48 | struct B1 (virtual base) |
269 | // CHECK-NEXT: 48 | char a |
270 | // CHECK-NEXT: | [sizeof=64, align=16 |
271 | // CHECK-NEXT: | nvsize=48, nvalign=16] |
272 | // CHECK-X64: *** Dumping AST Record Layout |
273 | // CHECK-X64-NEXT: 0 | struct I |
274 | // CHECK-X64-NEXT: 0 | struct B0 (base) |
275 | // CHECK-X64-NEXT: 0 | int a |
276 | // CHECK-X64-NEXT: 8 | (I vbtable pointer) |
277 | // CHECK-X64-NEXT: 20 | int a |
278 | // CHECK-X64-NEXT: 24 | int a1 |
279 | // CHECK-X64-NEXT: 32 | int a2 |
280 | // CHECK-X64-NEXT: 48 | struct B1 (virtual base) |
281 | // CHECK-X64-NEXT: 48 | char a |
282 | // CHECK-X64-NEXT: | [sizeof=64, align=16 |
283 | // CHECK-X64-NEXT: | nvsize=48, nvalign=16] |
284 | |
285 | struct J : B0, B3, virtual B1 { int a; int a1; J() : a(0xf0000012), a1(0xf0000012) {} }; |
286 | |
287 | // CHECK: *** Dumping AST Record Layout |
288 | // CHECK-NEXT: 0 | struct J |
289 | // CHECK-NEXT: 0 | struct B0 (base) |
290 | // CHECK-NEXT: 0 | int a |
291 | // CHECK-NEXT: 16 | struct B3 (base) |
292 | // CHECK-NEXT: 16 | int a |
293 | // CHECK-NEXT: 32 | (J vbtable pointer) |
294 | // CHECK-NEXT: 48 | int a |
295 | // CHECK-NEXT: 52 | int a1 |
296 | // CHECK-NEXT: 64 | struct B1 (virtual base) |
297 | // CHECK-NEXT: 64 | char a |
298 | // CHECK-NEXT: | [sizeof=80, align=16 |
299 | // CHECK-NEXT: | nvsize=64, nvalign=16] |
300 | // CHECK-X64: *** Dumping AST Record Layout |
301 | // CHECK-X64-NEXT: 0 | struct J |
302 | // CHECK-X64-NEXT: 0 | struct B0 (base) |
303 | // CHECK-X64-NEXT: 0 | int a |
304 | // CHECK-X64-NEXT: 16 | struct B3 (base) |
305 | // CHECK-X64-NEXT: 16 | int a |
306 | // CHECK-X64-NEXT: 32 | (J vbtable pointer) |
307 | // CHECK-X64-NEXT: 48 | int a |
308 | // CHECK-X64-NEXT: 52 | int a1 |
309 | // CHECK-X64-NEXT: 64 | struct B1 (virtual base) |
310 | // CHECK-X64-NEXT: 64 | char a |
311 | // CHECK-X64-NEXT: | [sizeof=80, align=16 |
312 | // CHECK-X64-NEXT: | nvsize=64, nvalign=16] |
313 | |
314 | struct K { int a; K() : a(0xf0000013) {} virtual void f() { printf("K"); } }; |
315 | |
316 | // CHECK: *** Dumping AST Record Layout |
317 | // CHECK-NEXT: 0 | struct K |
318 | // CHECK-NEXT: 0 | (K vftable pointer) |
319 | // CHECK-NEXT: 4 | int a |
320 | // CHECK-NEXT: | [sizeof=8, align=4 |
321 | // CHECK-NEXT: | nvsize=8, nvalign=4] |
322 | // CHECK-X64: *** Dumping AST Record Layout |
323 | // CHECK-X64-NEXT: 0 | struct K |
324 | // CHECK-X64-NEXT: 0 | (K vftable pointer) |
325 | // CHECK-X64-NEXT: 8 | int a |
326 | // CHECK-X64-NEXT: | [sizeof=16, align=8 |
327 | // CHECK-X64-NEXT: | nvsize=16, nvalign=8] |
328 | |
329 | struct L : virtual K { int a; L() : a(0xf0000014) {} virtual void g() { printf("L"); } }; |
330 | |
331 | // CHECK: *** Dumping AST Record Layout |
332 | // CHECK-NEXT: 0 | struct L |
333 | // CHECK-NEXT: 0 | (L vftable pointer) |
334 | // CHECK-NEXT: 4 | (L vbtable pointer) |
335 | // CHECK-NEXT: 8 | int a |
336 | // CHECK-NEXT: 12 | struct K (virtual base) |
337 | // CHECK-NEXT: 12 | (K vftable pointer) |
338 | // CHECK-NEXT: 16 | int a |
339 | // CHECK-NEXT: | [sizeof=20, align=4 |
340 | // CHECK-NEXT: | nvsize=12, nvalign=4] |
341 | // CHECK-X64: *** Dumping AST Record Layout |
342 | // CHECK-X64-NEXT: 0 | struct L |
343 | // CHECK-X64-NEXT: 0 | (L vftable pointer) |
344 | // CHECK-X64-NEXT: 8 | (L vbtable pointer) |
345 | // CHECK-X64-NEXT: 16 | int a |
346 | // CHECK-X64-NEXT: 24 | struct K (virtual base) |
347 | // CHECK-X64-NEXT: 24 | (K vftable pointer) |
348 | // CHECK-X64-NEXT: 32 | int a |
349 | // CHECK-X64-NEXT: | [sizeof=40, align=8 |
350 | // CHECK-X64-NEXT: | nvsize=24, nvalign=8] |
351 | |
352 | struct M : virtual K { int a; M() : a(0xf0000015) {} virtual void f() { printf("M"); } }; |
353 | |
354 | // CHECK: *** Dumping AST Record Layout |
355 | // CHECK-NEXT: 0 | struct M |
356 | // CHECK-NEXT: 0 | (M vbtable pointer) |
357 | // CHECK-NEXT: 4 | int a |
358 | // CHECK-NEXT: 8 | (vtordisp for vbase K) |
359 | // CHECK-NEXT: 12 | struct K (virtual base) |
360 | // CHECK-NEXT: 12 | (K vftable pointer) |
361 | // CHECK-NEXT: 16 | int a |
362 | // CHECK-NEXT: | [sizeof=20, align=4 |
363 | // CHECK-NEXT: | nvsize=8, nvalign=4] |
364 | // CHECK-X64: *** Dumping AST Record Layout |
365 | // CHECK-X64-NEXT: 0 | struct M |
366 | // CHECK-X64-NEXT: 0 | (M vbtable pointer) |
367 | // CHECK-X64-NEXT: 8 | int a |
368 | // CHECK-X64-NEXT: 20 | (vtordisp for vbase K) |
369 | // CHECK-X64-NEXT: 24 | struct K (virtual base) |
370 | // CHECK-X64-NEXT: 24 | (K vftable pointer) |
371 | // CHECK-X64-NEXT: 32 | int a |
372 | // CHECK-X64-NEXT: | [sizeof=40, align=8 |
373 | // CHECK-X64-NEXT: | nvsize=16, nvalign=8] |
374 | |
375 | int a[ |
376 | sizeof(A)+ |
377 | sizeof(B)+ |
378 | sizeof(C)+ |
379 | sizeof(D)+ |
380 | sizeof(E)+ |
381 | sizeof(F)+ |
382 | sizeof(G)+ |
383 | sizeof(H)+ |
384 | sizeof(I)+ |
385 | sizeof(J)+ |
386 | sizeof(K)+ |
387 | sizeof(L)+ |
388 | sizeof(M)]; |
389 | |