LWG 3035. std::allocator's constructors should be constexpr
[official-gcc.git] / gcc / testsuite / gcc.dg / compat / struct-by-value-4_x.c
blobdef20ce8b0315d99f632793a58d22d38b3c79149
1 #include "compat-common.h"
3 #define T(N, TYPE) \
4 struct S##TYPE##N { TYPE i[N]; }; \
6 struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \
7 struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \
8 struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \
9 struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \
10 struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \
11 struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \
12 struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \
13 struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \
15 extern void init##TYPE (TYPE *p, int i); \
16 extern void checkg##TYPE##N (void); \
17 extern void \
18 test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
19 struct S##TYPE##N s3, struct S##TYPE##N s4, \
20 struct S##TYPE##N s5, struct S##TYPE##N s6, \
21 struct S##TYPE##N s7, struct S##TYPE##N s8, \
22 struct S##TYPE##N s9, struct S##TYPE##N s10, \
23 struct S##TYPE##N s11, struct S##TYPE##N s12, \
24 struct S##TYPE##N s13, struct S##TYPE##N s14, \
25 struct S##TYPE##N s15, struct S##TYPE##N s16); \
26 extern void testva##TYPE##N (int n, ...); \
29 void \
30 init##TYPE##N (struct S##TYPE##N *p, int i) \
31 { \
32 int j; \
33 for (j = 0; j < N; j++) \
34 init##TYPE(&p->i[j], i+j); \
35 } \
37 void \
38 check##TYPE##N (struct S##TYPE##N *p, int i) \
39 { \
40 int j; \
41 for (j = 0; j < N; j++) \
42 check##TYPE(p->i[j], i+j); \
43 } \
45 void \
46 test2_##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
47 struct S##TYPE##N s3, struct S##TYPE##N s4, \
48 struct S##TYPE##N s5, struct S##TYPE##N s6, \
49 struct S##TYPE##N s7, struct S##TYPE##N s8) \
50 { \
51 test##TYPE##N (s1, g2s##TYPE##N, s2, g4s##TYPE##N, \
52 s3, g6s##TYPE##N, s4, g8s##TYPE##N, \
53 s5, g10s##TYPE##N, s6, g12s##TYPE##N, \
54 s7, g14s##TYPE##N, s8, g16s##TYPE##N); \
55 } \
57 void \
58 testit##TYPE##N (void) \
59 { \
60 DEBUG_FPUTS (#TYPE "[" #N "]"); \
61 DEBUG_FPUTS (" init: "); \
62 init##TYPE##N ( &g1s##TYPE##N, 1*16); \
63 init##TYPE##N ( &g2s##TYPE##N, 2*16); \
64 init##TYPE##N ( &g3s##TYPE##N, 3*16); \
65 init##TYPE##N ( &g4s##TYPE##N, 4*16); \
66 init##TYPE##N ( &g5s##TYPE##N, 5*16); \
67 init##TYPE##N ( &g6s##TYPE##N, 6*16); \
68 init##TYPE##N ( &g7s##TYPE##N, 7*16); \
69 init##TYPE##N ( &g8s##TYPE##N, 8*16); \
70 init##TYPE##N ( &g9s##TYPE##N, 9*16); \
71 init##TYPE##N (&g10s##TYPE##N, 10*16); \
72 init##TYPE##N (&g11s##TYPE##N, 11*16); \
73 init##TYPE##N (&g12s##TYPE##N, 12*16); \
74 init##TYPE##N (&g13s##TYPE##N, 13*16); \
75 init##TYPE##N (&g14s##TYPE##N, 14*16); \
76 init##TYPE##N (&g15s##TYPE##N, 15*16); \
77 init##TYPE##N (&g16s##TYPE##N, 16*16); \
78 checkg##TYPE##N (); \
79 DEBUG_NL; \
80 DEBUG_FPUTS (#TYPE "[" #N "]"); \
81 DEBUG_FPUTS (" test: "); \
82 test##TYPE##N (g1s##TYPE##N, g2s##TYPE##N, \
83 g3s##TYPE##N, g4s##TYPE##N, \
84 g5s##TYPE##N, g6s##TYPE##N, \
85 g7s##TYPE##N, g8s##TYPE##N, \
86 g9s##TYPE##N, g10s##TYPE##N, \
87 g11s##TYPE##N, g12s##TYPE##N, \
88 g13s##TYPE##N, g14s##TYPE##N, \
89 g15s##TYPE##N, g16s##TYPE##N); \
90 DEBUG_NL; \
91 DEBUG_FPUTS (#TYPE "[" #N "]"); \
92 DEBUG_FPUTS (" testva:"); \
93 testva##TYPE##N (16, \
94 g1s##TYPE##N, g2s##TYPE##N, \
95 g3s##TYPE##N, g4s##TYPE##N, \
96 g5s##TYPE##N, g6s##TYPE##N, \
97 g7s##TYPE##N, g8s##TYPE##N, \
98 g9s##TYPE##N, g10s##TYPE##N, \
99 g11s##TYPE##N, g12s##TYPE##N, \
100 g13s##TYPE##N, g14s##TYPE##N, \
101 g15s##TYPE##N, g16s##TYPE##N); \
102 DEBUG_NL; \
103 DEBUG_FPUTS (#TYPE "[" #N "]"); \
104 DEBUG_FPUTS (" test2: "); \
105 test2_##TYPE##N (g1s##TYPE##N, g3s##TYPE##N, \
106 g5s##TYPE##N, g7s##TYPE##N, \
107 g9s##TYPE##N, g11s##TYPE##N, \
108 g13s##TYPE##N, g15s##TYPE##N); \
109 DEBUG_NL; \
112 typedef struct { char c; } Sc;
113 typedef struct { short s; } Ss;
114 typedef struct { int i; } Si;
115 typedef struct { short s; char c; } Ssc;
116 typedef struct { int i; short s; } Sis;
117 typedef struct { char c; short s; int i; } Scsi;
118 typedef struct { char c; int i; short s; } Scis;
120 void checkSc (Sc x, int i) { if (x.c != i/16) DEBUG_CHECK }
121 void checkSs (Ss x, int i) { if (x.s != i) DEBUG_CHECK }
122 void checkSi (Si x, int i) { if (x.i != i) DEBUG_CHECK }
123 void checkSsc (Ssc x, int i)
124 { if (x.s != i || x.c != (i/16)+1) DEBUG_CHECK }
125 void checkSis (Sis x, int i)
126 { if (x.i != i || x.s != i+1) DEBUG_CHECK }
127 void checkScsi (Scsi x, int i)
128 { if (x.c != i/16 || x.s != i+1 || x.i != i+2) DEBUG_CHECK }
129 void checkScis (Scis x, int i)
130 { if (x.c != i/16 || x.i != i+1 || x.s != i+2) DEBUG_CHECK }
132 #ifndef SKIP_ZERO_ARRAY
133 T(0, Sc)
134 #endif
135 T(1, Sc)
136 T(2, Sc)
137 T(3, Sc)
138 T(4, Sc)
139 T(5, Sc)
140 T(6, Sc)
141 T(7, Sc)
142 T(8, Sc)
143 T(9, Sc)
144 T(10, Sc)
145 T(11, Sc)
146 T(12, Sc)
147 T(13, Sc)
148 T(14, Sc)
149 T(15, Sc)
150 #ifndef SKIP_ZERO_ARRAY
151 T(0, Ss)
152 #endif
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 #ifndef SKIP_ZERO_ARRAY
169 T(0, Si)
170 #endif
171 T(1, Si)
172 T(2, Si)
173 T(3, Si)
174 T(4, Si)
175 T(5, Si)
176 T(6, Si)
177 T(7, Si)
178 T(8, Si)
179 T(9, Si)
180 T(10, Si)
181 T(11, Si)
182 T(12, Si)
183 T(13, Si)
184 T(14, Si)
185 T(15, Si)
187 #undef T
189 void
190 struct_by_value_4_x ()
192 DEBUG_INIT
194 #define T(N, TYPE) testit##TYPE##N ();
196 #ifndef SKIP_ZERO_ARRAY
197 T(0, Sc)
198 #endif
199 T(1, Sc)
200 T(2, Sc)
201 T(3, Sc)
202 T(4, Sc)
203 T(5, Sc)
204 T(6, Sc)
205 T(7, Sc)
206 T(8, Sc)
207 T(9, Sc)
208 T(10, Sc)
209 T(11, Sc)
210 T(12, Sc)
211 T(13, Sc)
212 T(14, Sc)
213 T(15, Sc)
214 #ifndef SKIP_ZERO_ARRAY
215 T(0, Ss)
216 #endif
217 T(1, Ss)
218 T(2, Ss)
219 T(3, Ss)
220 T(4, Ss)
221 T(5, Ss)
222 T(6, Ss)
223 T(7, Ss)
224 T(8, Ss)
225 T(9, Ss)
226 T(10, Ss)
227 T(11, Ss)
228 T(12, Ss)
229 T(13, Ss)
230 T(14, Ss)
231 T(15, Ss)
232 #ifndef SKIP_ZERO_ARRAY
233 T(0, Si)
234 #endif
235 T(1, Si)
236 T(2, Si)
237 T(3, Si)
238 T(4, Si)
239 T(5, Si)
240 T(6, Si)
241 T(7, Si)
242 T(8, Si)
243 T(9, Si)
244 T(10, Si)
245 T(11, Si)
246 T(12, Si)
247 T(13, Si)
248 T(14, Si)
249 T(15, Si)
251 DEBUG_FINI
253 if (fails != 0)
254 abort ();
256 #undef T