OSDN Git Service

9ff53ef8a1112137b11eb05da3b3d684faf26435
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / compat / struct-by-value-4_x.c
1 #ifdef DBG
2 #include <stdio.h>
3 #define DEBUG_FPUTS(x) fputs (x, stdout)
4 #define DEBUG_DOT putc ('.', stdout)
5 #define DEBUG_NL putc ('\n', stdout)
6 #else
7 #define DEBUG_FPUTS(x)
8 #define DEBUG_DOT
9 #define DEBUG_NL
10 #endif
11
12 #define T(N, TYPE)                                              \
13 struct S##TYPE##N { TYPE i[N]; };                               \
14                                                                 \
15 struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N;                   \
16 struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N;                   \
17 struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N;                   \
18 struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N;                   \
19 struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N;                  \
20 struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N;                 \
21 struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N;                 \
22 struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N;                 \
23                                                                 \
24 extern void init##TYPE (TYPE *p, int i);                        \
25 extern void checkg##TYPE##N (void);                             \
26 extern void                                                     \
27 test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2,      \
28                struct S##TYPE##N s3, struct S##TYPE##N s4,      \
29                struct S##TYPE##N s5, struct S##TYPE##N s6,      \
30                struct S##TYPE##N s7, struct S##TYPE##N s8,      \
31                struct S##TYPE##N s9, struct S##TYPE##N s10,     \
32                struct S##TYPE##N s11, struct S##TYPE##N s12,    \
33                struct S##TYPE##N s13, struct S##TYPE##N s14,    \
34                struct S##TYPE##N s15, struct S##TYPE##N s16);   \
35 extern void testva##TYPE##N (int n, ...);                       \
36                                                                 \
37                                                                 \
38 void                                                            \
39 init##TYPE##N (struct S##TYPE##N *p, int i)                     \
40 {                                                               \
41   int j;                                                        \
42   for (j = 0; j < N; j++)                                       \
43     init##TYPE(&p->i[j], i+j);                                  \
44 }                                                               \
45                                                                 \
46 void                                                            \
47 check##TYPE##N (struct S##TYPE##N *p, int i)                    \
48 {                                                               \
49   int j;                                                        \
50   for (j = 0; j < N; j++)                                       \
51     check##TYPE(p->i[j], i+j);                                  \
52 }                                                               \
53                                                                 \
54 void                                                            \
55 test2_##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2,    \
56                  struct S##TYPE##N s3, struct S##TYPE##N s4,    \
57                  struct S##TYPE##N s5, struct S##TYPE##N s6,    \
58                  struct S##TYPE##N s7, struct S##TYPE##N s8)    \
59 {                                                               \
60   test##TYPE##N (s1, g2s##TYPE##N, s2, g4s##TYPE##N,            \
61                  s3, g6s##TYPE##N, s4, g8s##TYPE##N,            \
62                  s5, g10s##TYPE##N, s6, g12s##TYPE##N,          \
63                  s7, g14s##TYPE##N, s8, g16s##TYPE##N);         \
64 }                                                               \
65                                                                 \
66 void                                                            \
67 testit##TYPE##N (void)                                          \
68 {                                                               \
69   DEBUG_FPUTS (#TYPE "[" #N "]");                               \
70   init##TYPE##N  ( &g1s##TYPE##N,  1*16);                       \
71   init##TYPE##N  ( &g2s##TYPE##N,  2*16);                       \
72   init##TYPE##N  ( &g3s##TYPE##N,  3*16);                       \
73   init##TYPE##N  ( &g4s##TYPE##N,  4*16);                       \
74   init##TYPE##N  ( &g5s##TYPE##N,  5*16);                       \
75   init##TYPE##N  ( &g6s##TYPE##N,  6*16);                       \
76   init##TYPE##N  ( &g7s##TYPE##N,  7*16);                       \
77   init##TYPE##N  ( &g8s##TYPE##N,  8*16);                       \
78   init##TYPE##N  ( &g9s##TYPE##N,  9*16);                       \
79   init##TYPE##N  (&g10s##TYPE##N, 10*16);                       \
80   init##TYPE##N  (&g11s##TYPE##N, 11*16);                       \
81   init##TYPE##N  (&g12s##TYPE##N, 12*16);                       \
82   init##TYPE##N  (&g13s##TYPE##N, 13*16);                       \
83   init##TYPE##N  (&g14s##TYPE##N, 14*16);                       \
84   init##TYPE##N  (&g15s##TYPE##N, 15*16);                       \
85   init##TYPE##N  (&g16s##TYPE##N, 16*16);                       \
86   checkg##TYPE##N ();                                           \
87   DEBUG_FPUTS (" test");                                        \
88   test##TYPE##N (g1s##TYPE##N, g2s##TYPE##N,                    \
89                  g3s##TYPE##N, g4s##TYPE##N,                    \
90                  g5s##TYPE##N, g6s##TYPE##N,                    \
91                  g7s##TYPE##N, g8s##TYPE##N,                    \
92                  g9s##TYPE##N, g10s##TYPE##N,                   \
93                  g11s##TYPE##N, g12s##TYPE##N,                  \
94                  g13s##TYPE##N, g14s##TYPE##N,                  \
95                  g15s##TYPE##N, g16s##TYPE##N);                 \
96   DEBUG_FPUTS (" testva");                                      \
97   testva##TYPE##N (16,                                          \
98                    g1s##TYPE##N, g2s##TYPE##N,                  \
99                    g3s##TYPE##N, g4s##TYPE##N,                  \
100                    g5s##TYPE##N, g6s##TYPE##N,                  \
101                    g7s##TYPE##N, g8s##TYPE##N,                  \
102                    g9s##TYPE##N, g10s##TYPE##N,                 \
103                    g11s##TYPE##N, g12s##TYPE##N,                \
104                    g13s##TYPE##N, g14s##TYPE##N,                \
105                    g15s##TYPE##N, g16s##TYPE##N);               \
106   DEBUG_FPUTS (" test2");                                       \
107   test2_##TYPE##N (g1s##TYPE##N, g3s##TYPE##N,                  \
108                    g5s##TYPE##N, g7s##TYPE##N,                  \
109                    g9s##TYPE##N, g11s##TYPE##N,                 \
110                    g13s##TYPE##N, g15s##TYPE##N);               \
111   DEBUG_NL;                                                     \
112 }
113
114 typedef struct { char c; } Sc;
115 typedef struct { short s; } Ss;
116 typedef struct { int i; } Si;
117 typedef struct { short s; char c; } Ssc;
118 typedef struct { int i; short s; } Sis;
119 typedef struct { char c; short s; int i; } Scsi;
120 typedef struct { char c; int i; short s; } Scis;
121
122 extern void abort (void);
123
124 void checkSc (Sc x, int i) { if (x.c != i/16) { DEBUG_NL; abort (); } }
125 void checkSs (Ss x, int i) { if (x.s != i) { DEBUG_NL; abort (); } }
126 void checkSi (Si x, int i) { if (x.i != i) { DEBUG_NL; abort (); } }
127 void checkSsc (Ssc x, int i)
128 { if (x.s != i || x.c != (i/16)+1) { DEBUG_NL; abort (); } }
129 void checkSis (Sis x, int i)
130 { if (x.i != i || x.s != i+1) { DEBUG_NL; abort (); } }
131 void checkScsi (Scsi x, int i)
132 { if (x.c != i/16 || x.s != i+1 || x.i != i+2) { DEBUG_NL; abort (); } }
133 void checkScis (Scis x, int i)
134 { if (x.c != i/16 || x.i != i+1 || x.s != i+2) { DEBUG_NL; abort (); } }
135
136 T(0, Sc)
137 T(1, Sc)
138 T(2, Sc)
139 T(3, Sc)
140 T(4, Sc)
141 T(5, Sc)
142 T(6, Sc)
143 T(7, Sc)
144 T(8, Sc)
145 T(9, Sc)
146 T(10, Sc)
147 T(11, Sc)
148 T(12, Sc)
149 T(13, Sc)
150 T(14, Sc)
151 T(15, Sc)
152 T(0, Ss)
153 T(1, Ss)
154 T(2, Ss)
155 T(3, Ss)
156 T(4, Ss)
157 T(5, Ss)
158 T(6, Ss)
159 T(7, Ss)
160 T(8, Ss)
161 T(9, Ss)
162 T(10, Ss)
163 T(11, Ss)
164 T(12, Ss)
165 T(13, Ss)
166 T(14, Ss)
167 T(15, Ss)
168 T(0, Si)
169 T(1, Si)
170 T(2, Si)
171 T(3, Si)
172 T(4, Si)
173 T(5, Si)
174 T(6, Si)
175 T(7, Si)
176 T(8, Si)
177 T(9, Si)
178 T(10, Si)
179 T(11, Si)
180 T(12, Si)
181 T(13, Si)
182 T(14, Si)
183 T(15, Si)
184 T(0, Ssc)
185 T(1, Ssc)
186 T(2, Ssc)
187 T(3, Ssc)
188 T(4, Ssc)
189 T(5, Ssc)
190 T(6, Ssc)
191 T(7, Ssc)
192 T(8, Ssc)
193 T(9, Ssc)
194 T(10, Ssc)
195 T(11, Ssc)
196 T(12, Ssc)
197 T(13, Ssc)
198 T(14, Ssc)
199 T(15, Ssc)
200 T(0, Sis)
201 T(1, Sis)
202 T(2, Sis)
203 T(3, Sis)
204 T(4, Sis)
205 T(5, Sis)
206 T(6, Sis)
207 T(7, Sis)
208 T(8, Sis)
209 T(9, Sis)
210 T(10, Sis)
211 T(11, Sis)
212 T(12, Sis)
213 T(13, Sis)
214 T(14, Sis)
215 T(15, Sis)
216 T(0, Scsi)
217 T(1, Scsi)
218 T(2, Scsi)
219 T(3, Scsi)
220 T(4, Scsi)
221 T(5, Scsi)
222 T(6, Scsi)
223 T(7, Scsi)
224 T(8, Scsi)
225 T(9, Scsi)
226 T(10, Scsi)
227 T(11, Scsi)
228 T(12, Scsi)
229 T(13, Scsi)
230 T(14, Scsi)
231 T(15, Scsi)
232 T(0, Scis)
233 T(1, Scis)
234 T(2, Scis)
235 T(3, Scis)
236 T(4, Scis)
237 T(5, Scis)
238 T(6, Scis)
239 T(7, Scis)
240 T(8, Scis)
241 T(9, Scis)
242 T(10, Scis)
243 T(11, Scis)
244 T(12, Scis)
245 T(13, Scis)
246 T(14, Scis)
247 T(15, Scis)
248
249 #undef T
250
251 void
252 struct_by_value_4_x ()
253 {
254 #define T(N, TYPE) testit##TYPE##N ();
255
256 T(0, Sc)
257 T(1, Sc)
258 T(2, Sc)
259 T(3, Sc)
260 T(4, Sc)
261 T(5, Sc)
262 T(6, Sc)
263 T(7, Sc)
264 T(8, Sc)
265 T(9, Sc)
266 T(10, Sc)
267 T(11, Sc)
268 T(12, Sc)
269 T(13, Sc)
270 T(14, Sc)
271 T(15, Sc)
272 T(0, Ss)
273 T(1, Ss)
274 T(2, Ss)
275 T(3, Ss)
276 T(4, Ss)
277 T(5, Ss)
278 T(6, Ss)
279 T(7, Ss)
280 T(8, Ss)
281 T(9, Ss)
282 T(10, Ss)
283 T(11, Ss)
284 T(12, Ss)
285 T(13, Ss)
286 T(14, Ss)
287 T(15, Ss)
288 T(0, Si)
289 T(1, Si)
290 T(2, Si)
291 T(3, Si)
292 T(4, Si)
293 T(5, Si)
294 T(6, Si)
295 T(7, Si)
296 T(8, Si)
297 T(9, Si)
298 T(10, Si)
299 T(11, Si)
300 T(12, Si)
301 T(13, Si)
302 T(14, Si)
303 T(15, Si)
304 T(0, Ssc)
305 T(1, Ssc)
306 T(2, Ssc)
307 T(3, Ssc)
308 T(4, Ssc)
309 T(5, Ssc)
310 T(6, Ssc)
311 T(7, Ssc)
312 T(8, Ssc)
313 T(9, Ssc)
314 T(10, Ssc)
315 T(11, Ssc)
316 T(12, Ssc)
317 T(13, Ssc)
318 T(14, Ssc)
319 T(15, Ssc)
320 T(0, Sis)
321 T(1, Sis)
322 T(2, Sis)
323 T(3, Sis)
324 T(4, Sis)
325 T(5, Sis)
326 T(6, Sis)
327 T(7, Sis)
328 T(8, Sis)
329 T(9, Sis)
330 T(10, Sis)
331 T(11, Sis)
332 T(12, Sis)
333 T(13, Sis)
334 T(14, Sis)
335 T(15, Sis)
336 T(0, Scsi)
337 T(1, Scsi)
338 T(2, Scsi)
339 T(3, Scsi)
340 T(4, Scsi)
341 T(5, Scsi)
342 T(6, Scsi)
343 T(7, Scsi)
344 T(8, Scsi)
345 T(9, Scsi)
346 T(10, Scsi)
347 T(11, Scsi)
348 T(12, Scsi)
349 T(13, Scsi)
350 T(14, Scsi)
351 T(15, Scsi)
352 T(0, Scis)
353 T(1, Scis)
354 T(2, Scis)
355 T(3, Scis)
356 T(4, Scis)
357 T(5, Scis)
358 T(6, Scis)
359 T(7, Scis)
360 T(8, Scis)
361 T(9, Scis)
362 T(10, Scis)
363 T(11, Scis)
364 T(12, Scis)
365 T(13, Scis)
366 T(14, Scis)
367 T(15, Scis)
368
369 #undef T
370 }