2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.dg / compat / struct-by-value-2_y.c
blobf5b3c713f1783dd3e669d22ea6db2f9f7f2bb6cc
1 #include <stdarg.h>
3 #include "compat-common.h"
5 /* Turn off checking for variable arguments with -DSKIPVA. */
6 #ifdef SKIPVA
7 const int test_va = 0;
8 #else
9 const int test_va = 1;
10 #endif
12 #define T(N, NAME, TYPE) \
13 struct S##NAME##N { TYPE i[N]; }; \
15 extern struct S##NAME##N g1s##NAME##N, g2s##NAME##N; \
16 extern struct S##NAME##N g3s##NAME##N, g4s##NAME##N; \
17 extern struct S##NAME##N g5s##NAME##N, g6s##NAME##N; \
18 extern struct S##NAME##N g7s##NAME##N, g8s##NAME##N; \
19 extern struct S##NAME##N g9s##NAME##N, g10s##NAME##N; \
20 extern struct S##NAME##N g11s##NAME##N, g12s##NAME##N; \
21 extern struct S##NAME##N g13s##NAME##N, g14s##NAME##N; \
22 extern struct S##NAME##N g15s##NAME##N, g16s##NAME##N; \
24 extern void check##NAME##N (struct S##NAME##N *p, int i); \
25 extern void \
26 test2_##NAME##N (struct S##NAME##N s1, struct S##NAME##N s2, \
27 struct S##NAME##N s3, struct S##NAME##N s4, \
28 struct S##NAME##N s5, struct S##NAME##N s6, \
29 struct S##NAME##N s7, struct S##NAME##N s8); \
31 void \
32 init##NAME##N (struct S##NAME##N *p, int i) \
33 { \
34 int j; \
35 for (j = 0; j < N; j++) \
36 p->i[j] = i + j; \
37 } \
39 void \
40 checkg##NAME##N (void) \
41 { \
42 check##NAME##N ( &g1s##NAME##N, 1*16); \
43 check##NAME##N ( &g2s##NAME##N, 2*16); \
44 check##NAME##N ( &g3s##NAME##N, 3*16); \
45 check##NAME##N ( &g4s##NAME##N, 4*16); \
46 check##NAME##N ( &g5s##NAME##N, 5*16); \
47 check##NAME##N ( &g6s##NAME##N, 6*16); \
48 check##NAME##N ( &g7s##NAME##N, 7*16); \
49 check##NAME##N ( &g8s##NAME##N, 8*16); \
50 check##NAME##N ( &g9s##NAME##N, 9*16); \
51 check##NAME##N (&g10s##NAME##N, 10*16); \
52 check##NAME##N (&g11s##NAME##N, 11*16); \
53 check##NAME##N (&g12s##NAME##N, 12*16); \
54 check##NAME##N (&g13s##NAME##N, 13*16); \
55 check##NAME##N (&g14s##NAME##N, 14*16); \
56 check##NAME##N (&g15s##NAME##N, 15*16); \
57 check##NAME##N (&g16s##NAME##N, 16*16); \
58 } \
60 void \
61 test##NAME##N (struct S##NAME##N s1, struct S##NAME##N s2, \
62 struct S##NAME##N s3, struct S##NAME##N s4, \
63 struct S##NAME##N s5, struct S##NAME##N s6, \
64 struct S##NAME##N s7, struct S##NAME##N s8, \
65 struct S##NAME##N s9, struct S##NAME##N s10, \
66 struct S##NAME##N s11, struct S##NAME##N s12, \
67 struct S##NAME##N s13, struct S##NAME##N s14, \
68 struct S##NAME##N s15, struct S##NAME##N s16) \
69 { \
70 check##NAME##N (&s1, 1*16); \
71 check##NAME##N (&s2, 2*16); \
72 check##NAME##N (&s3, 3*16); \
73 check##NAME##N (&s4, 4*16); \
74 check##NAME##N (&s5, 5*16); \
75 check##NAME##N (&s6, 6*16); \
76 check##NAME##N (&s7, 7*16); \
77 check##NAME##N (&s8, 8*16); \
78 check##NAME##N (&s9, 9*16); \
79 check##NAME##N (&s10, 10*16); \
80 check##NAME##N (&s11, 11*16); \
81 check##NAME##N (&s12, 12*16); \
82 check##NAME##N (&s13, 13*16); \
83 check##NAME##N (&s14, 14*16); \
84 check##NAME##N (&s15, 15*16); \
85 check##NAME##N (&s16, 16*16); \
86 } \
88 void \
89 testva##NAME##N (int n, ...) \
90 { \
91 int i; \
92 va_list ap; \
93 if (test_va) \
94 { \
95 va_start (ap, n); \
96 for (i = 0; i < n; i++) \
97 { \
98 struct S##NAME##N t = va_arg (ap, struct S##NAME##N); \
99 check##NAME##N (&t, (i+1)*16); \
101 va_end (ap); \
105 T(0, uc, unsigned char)
106 T(1, uc, unsigned char)
107 T(2, uc, unsigned char)
108 T(3, uc, unsigned char)
109 T(4, uc, unsigned char)
110 T(5, uc, unsigned char)
111 T(6, uc, unsigned char)
112 T(7, uc, unsigned char)
113 T(8, uc, unsigned char)
114 T(9, uc, unsigned char)
115 T(10, uc, unsigned char)
116 T(11, uc, unsigned char)
117 T(12, uc, unsigned char)
118 T(13, uc, unsigned char)
119 T(14, uc, unsigned char)
120 T(15, uc, unsigned char)
121 T(0, us, unsigned short)
122 T(1, us, unsigned short)
123 T(2, us, unsigned short)
124 T(3, us, unsigned short)
125 T(4, us, unsigned short)
126 T(5, us, unsigned short)
127 T(6, us, unsigned short)
128 T(7, us, unsigned short)
129 T(8, us, unsigned short)
130 T(9, us, unsigned short)
131 T(10, us, unsigned short)
132 T(11, us, unsigned short)
133 T(12, us, unsigned short)
134 T(13, us, unsigned short)
135 T(14, us, unsigned short)
136 T(15, us, unsigned short)
137 T(0, ui, unsigned int)
138 T(1, ui, unsigned int)
139 T(2, ui, unsigned int)
140 T(3, ui, unsigned int)
141 T(4, ui, unsigned int)
142 T(5, ui, unsigned int)
143 T(6, ui, unsigned int)
144 T(7, ui, unsigned int)
145 T(8, ui, unsigned int)
146 T(9, ui, unsigned int)
147 T(10, ui, unsigned int)
148 T(11, ui, unsigned int)
149 T(12, ui, unsigned int)
150 T(13, ui, unsigned int)
151 T(14, ui, unsigned int)
152 T(15, ui, unsigned int)