Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.c-torture/execute/pr92904.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* PR target/92904 */ | |
2 | |
3 #include <stdarg.h> | |
4 | |
5 struct S { long long a, b; }; | |
6 struct __attribute__((aligned (16))) T { long long a, b; }; | |
7 struct U { double a, b, c, d; }; | |
8 struct __attribute__((aligned (32))) V { double a, b, c, d; }; | |
9 struct W { double a; long long b; }; | |
10 struct __attribute__((aligned (16))) X { double a; long long b; }; | |
11 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
12 __int128 b; | |
13 #endif | |
14 struct S c; | |
15 struct T d; | |
16 struct U e; | |
17 struct V f; | |
18 struct W g; | |
19 struct X h; | |
20 | |
21 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
22 __attribute__((noipa)) __int128 | |
23 f1 (int x, ...) | |
24 { | |
25 __int128 r; | |
26 va_list ap; | |
27 va_start (ap, x); | |
28 while (x--) | |
29 va_arg (ap, int); | |
30 r = va_arg (ap, __int128); | |
31 va_end (ap); | |
32 return r; | |
33 } | |
34 #endif | |
35 | |
36 __attribute__((noipa)) struct S | |
37 f2 (int x, ...) | |
38 { | |
39 struct S r; | |
40 va_list ap; | |
41 va_start (ap, x); | |
42 while (x--) | |
43 va_arg (ap, int); | |
44 r = va_arg (ap, struct S); | |
45 va_end (ap); | |
46 return r; | |
47 } | |
48 | |
49 __attribute__((noipa)) struct T | |
50 f3 (int x, ...) | |
51 { | |
52 struct T r; | |
53 va_list ap; | |
54 va_start (ap, x); | |
55 while (x--) | |
56 va_arg (ap, int); | |
57 r = va_arg (ap, struct T); | |
58 va_end (ap); | |
59 return r; | |
60 } | |
61 | |
62 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
63 __attribute__((noipa)) void | |
64 f4 (int x, ...) | |
65 { | |
66 va_list ap; | |
67 va_start (ap, x); | |
68 while (x--) | |
69 va_arg (ap, int); | |
70 b = va_arg (ap, __int128); | |
71 va_end (ap); | |
72 } | |
73 #endif | |
74 | |
75 __attribute__((noipa)) void | |
76 f5 (int x, ...) | |
77 { | |
78 va_list ap; | |
79 va_start (ap, x); | |
80 while (x--) | |
81 va_arg (ap, int); | |
82 c = va_arg (ap, struct S); | |
83 va_end (ap); | |
84 } | |
85 | |
86 __attribute__((noipa)) void | |
87 f6 (int x, ...) | |
88 { | |
89 va_list ap; | |
90 va_start (ap, x); | |
91 while (x--) | |
92 va_arg (ap, int); | |
93 d = va_arg (ap, struct T); | |
94 va_end (ap); | |
95 } | |
96 | |
97 __attribute__((noipa)) struct U | |
98 f7 (int x, ...) | |
99 { | |
100 struct U r; | |
101 va_list ap; | |
102 va_start (ap, x); | |
103 while (x--) | |
104 va_arg (ap, double); | |
105 r = va_arg (ap, struct U); | |
106 va_end (ap); | |
107 return r; | |
108 } | |
109 | |
110 __attribute__((noipa)) struct V | |
111 f8 (int x, ...) | |
112 { | |
113 struct V r; | |
114 va_list ap; | |
115 va_start (ap, x); | |
116 while (x--) | |
117 va_arg (ap, double); | |
118 r = va_arg (ap, struct V); | |
119 va_end (ap); | |
120 return r; | |
121 } | |
122 | |
123 __attribute__((noipa)) void | |
124 f9 (int x, ...) | |
125 { | |
126 va_list ap; | |
127 va_start (ap, x); | |
128 while (x--) | |
129 va_arg (ap, double); | |
130 e = va_arg (ap, struct U); | |
131 va_end (ap); | |
132 } | |
133 | |
134 __attribute__((noipa)) void | |
135 f10 (int x, ...) | |
136 { | |
137 va_list ap; | |
138 va_start (ap, x); | |
139 while (x--) | |
140 va_arg (ap, double); | |
141 f = va_arg (ap, struct V); | |
142 va_end (ap); | |
143 } | |
144 | |
145 __attribute__((noipa)) struct W | |
146 f11 (int x, ...) | |
147 { | |
148 struct W r; | |
149 va_list ap; | |
150 va_start (ap, x); | |
151 while (x--) | |
152 { | |
153 va_arg (ap, int); | |
154 va_arg (ap, double); | |
155 } | |
156 r = va_arg (ap, struct W); | |
157 va_end (ap); | |
158 return r; | |
159 } | |
160 | |
161 __attribute__((noipa)) struct X | |
162 f12 (int x, ...) | |
163 { | |
164 struct X r; | |
165 va_list ap; | |
166 va_start (ap, x); | |
167 while (x--) | |
168 { | |
169 va_arg (ap, int); | |
170 va_arg (ap, double); | |
171 } | |
172 r = va_arg (ap, struct X); | |
173 va_end (ap); | |
174 return r; | |
175 } | |
176 | |
177 __attribute__((noipa)) void | |
178 f13 (int x, ...) | |
179 { | |
180 va_list ap; | |
181 va_start (ap, x); | |
182 while (x--) | |
183 { | |
184 va_arg (ap, int); | |
185 va_arg (ap, double); | |
186 } | |
187 g = va_arg (ap, struct W); | |
188 va_end (ap); | |
189 } | |
190 | |
191 __attribute__((noipa)) void | |
192 f14 (int x, ...) | |
193 { | |
194 va_list ap; | |
195 va_start (ap, x); | |
196 while (x--) | |
197 { | |
198 va_arg (ap, int); | |
199 va_arg (ap, double); | |
200 } | |
201 h = va_arg (ap, struct X); | |
202 va_end (ap); | |
203 } | |
204 | |
205 int | |
206 main () | |
207 { | |
208 union Y { | |
209 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
210 __int128 b; | |
211 #endif | |
212 struct S c; | |
213 struct T d; | |
214 struct U e; | |
215 struct V f; | |
216 struct W g; | |
217 struct X h; | |
218 } u, v; | |
219 u.c.a = 0x5555555555555555ULL; | |
220 u.c.b = 0xaaaaaaaaaaaaaaaaULL; | |
221 #define C(x) \ | |
222 do { \ | |
223 if (u.c.a != x.c.a || u.c.b != x.c.b) __builtin_abort (); \ | |
224 u.c.a++; \ | |
225 u.c.b--; \ | |
226 } while (0) | |
227 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
228 v.b = f1 (0, u.b); C (v); | |
229 v.b = f1 (1, 0, u.b); C (v); | |
230 v.b = f1 (2, 0, 0, u.b); C (v); | |
231 v.b = f1 (3, 0, 0, 0, u.b); C (v); | |
232 v.b = f1 (4, 0, 0, 0, 0, u.b); C (v); | |
233 v.b = f1 (5, 0, 0, 0, 0, 0, u.b); C (v); | |
234 v.b = f1 (6, 0, 0, 0, 0, 0, 0, u.b); C (v); | |
235 v.b = f1 (7, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); | |
236 v.b = f1 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); | |
237 v.b = f1 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); C (v); | |
238 #endif | |
239 v.c = f2 (0, u.c); C (v); | |
240 v.c = f2 (1, 0, u.c); C (v); | |
241 v.c = f2 (2, 0, 0, u.c); C (v); | |
242 v.c = f2 (3, 0, 0, 0, u.c); C (v); | |
243 v.c = f2 (4, 0, 0, 0, 0, u.c); C (v); | |
244 v.c = f2 (5, 0, 0, 0, 0, 0, u.c); C (v); | |
245 v.c = f2 (6, 0, 0, 0, 0, 0, 0, u.c); C (v); | |
246 v.c = f2 (7, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); | |
247 v.c = f2 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); | |
248 v.c = f2 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); C (v); | |
249 v.d = f3 (0, u.d); C (v); | |
250 v.d = f3 (1, 0, u.d); C (v); | |
251 v.d = f3 (2, 0, 0, u.d); C (v); | |
252 v.d = f3 (3, 0, 0, 0, u.d); C (v); | |
253 v.d = f3 (4, 0, 0, 0, 0, u.d); C (v); | |
254 v.d = f3 (5, 0, 0, 0, 0, 0, u.d); C (v); | |
255 v.d = f3 (6, 0, 0, 0, 0, 0, 0, u.d); C (v); | |
256 v.d = f3 (7, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); | |
257 v.d = f3 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); | |
258 v.d = f3 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); C (v); | |
259 #if __SIZEOF_INT128__ == 2 * __SIZEOF_LONG_LONG__ | |
260 f4 (0, u.b); v.b = b; C (v); | |
261 f4 (1, 0, u.b); v.b = b; C (v); | |
262 f4 (2, 0, 0, u.b); v.b = b; C (v); | |
263 f4 (3, 0, 0, 0, u.b); v.b = b; C (v); | |
264 f4 (4, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
265 f4 (5, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
266 f4 (6, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
267 f4 (7, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
268 f4 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
269 f4 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.b); v.b = b; C (v); | |
270 #endif | |
271 f5 (0, u.c); v.c = c; C (v); | |
272 f5 (1, 0, u.c); v.c = c; C (v); | |
273 f5 (2, 0, 0, u.c); v.c = c; C (v); | |
274 f5 (3, 0, 0, 0, u.c); v.c = c; C (v); | |
275 f5 (4, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
276 f5 (5, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
277 f5 (6, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
278 f5 (7, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
279 f5 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
280 f5 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.c); v.c = c; C (v); | |
281 f6 (0, u.d); v.d = d; C (v); | |
282 f6 (1, 0, u.d); v.d = d; C (v); | |
283 f6 (2, 0, 0, u.d); v.d = d; C (v); | |
284 f6 (3, 0, 0, 0, u.d); v.d = d; C (v); | |
285 f6 (4, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
286 f6 (5, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
287 f6 (6, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
288 f6 (7, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
289 f6 (8, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
290 f6 (9, 0, 0, 0, 0, 0, 0, 0, 0, 0, u.d); v.d = d; C (v); | |
291 u.e.a = 1.25; | |
292 u.e.b = 2.75; | |
293 u.e.c = -3.5; | |
294 u.e.d = -2.0; | |
295 #undef C | |
296 #define C(x) \ | |
297 do { \ | |
298 if (u.e.a != x.e.a || u.e.b != x.e.b \ | |
299 || u.e.c != x.e.c || u.e.d != x.e.d) __builtin_abort ();\ | |
300 u.e.a++; \ | |
301 u.e.b--; \ | |
302 u.e.c++; \ | |
303 u.e.d--; \ | |
304 } while (0) | |
305 v.e = f7 (0, u.e); C (v); | |
306 v.e = f7 (1, 0.0, u.e); C (v); | |
307 v.e = f7 (2, 0.0, 0.0, u.e); C (v); | |
308 v.e = f7 (3, 0.0, 0.0, 0.0, u.e); C (v); | |
309 v.e = f7 (4, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
310 v.e = f7 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
311 v.e = f7 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
312 v.e = f7 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
313 v.e = f7 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
314 v.e = f7 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); C (v); | |
315 v.f = f8 (0, u.f); C (v); | |
316 v.f = f8 (1, 0.0, u.f); C (v); | |
317 v.f = f8 (2, 0.0, 0.0, u.f); C (v); | |
318 v.f = f8 (3, 0.0, 0.0, 0.0, u.f); C (v); | |
319 v.f = f8 (4, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
320 v.f = f8 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
321 v.f = f8 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
322 v.f = f8 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
323 v.f = f8 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
324 v.f = f8 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); C (v); | |
325 f9 (0, u.e); v.e = e; C (v); | |
326 f9 (1, 0.0, u.e); v.e = e; C (v); | |
327 f9 (2, 0.0, 0.0, u.e); v.e = e; C (v); | |
328 f9 (3, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
329 f9 (4, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
330 f9 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
331 f9 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
332 f9 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
333 f9 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
334 f9 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.e); v.e = e; C (v); | |
335 f10 (0, u.f); v.f = f; C (v); | |
336 f10 (1, 0.0, u.f); v.f = f; C (v); | |
337 f10 (2, 0.0, 0.0, u.f); v.f = f; C (v); | |
338 f10 (3, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
339 f10 (4, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
340 f10 (5, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
341 f10 (6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
342 f10 (7, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
343 f10 (8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
344 f10 (9, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, u.f); v.f = f; C (v); | |
345 u.g.a = 9.5; | |
346 u.g.b = 0x5555555555555555ULL; | |
347 #undef C | |
348 #define C(x) \ | |
349 do { \ | |
350 if (u.e.a != x.e.a || u.e.b != x.e.b) __builtin_abort (); \ | |
351 u.e.a++; \ | |
352 u.e.b--; \ | |
353 } while (0) | |
354 v.g = f11 (0, u.g); C (v); | |
355 v.g = f11 (1, 0, 0.0, u.g); C (v); | |
356 v.g = f11 (2, 0, 0.0, 0, 0.0, u.g); C (v); | |
357 v.g = f11 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
358 v.g = f11 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
359 v.g = f11 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
360 v.g = f11 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
361 v.g = f11 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
362 v.g = f11 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
363 v.g = f11 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); C (v); | |
364 v.h = f12 (0, u.h); C (v); | |
365 v.h = f12 (1, 0, 0.0, u.h); C (v); | |
366 v.h = f12 (2, 0, 0.0, 0, 0.0, u.h); C (v); | |
367 v.h = f12 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
368 v.h = f12 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
369 v.h = f12 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
370 v.h = f12 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
371 v.h = f12 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
372 v.h = f12 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
373 v.h = f12 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); C (v); | |
374 f13 (0, u.g); v.g = g; C (v); | |
375 f13 (1, 0, 0.0, u.g); v.g = g; C (v); | |
376 f13 (2, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
377 f13 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
378 f13 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
379 f13 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
380 f13 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
381 f13 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
382 f13 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
383 f13 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.g); v.g = g; C (v); | |
384 f14 (0, u.h); v.h = h; C (v); | |
385 f14 (1, 0, 0.0, u.h); v.h = h; C (v); | |
386 f14 (2, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
387 f14 (3, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
388 f14 (4, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
389 f14 (5, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
390 f14 (6, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
391 f14 (7, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
392 f14 (8, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
393 f14 (9, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, 0, 0.0, u.h); v.h = h; C (v); | |
394 return 0; | |
395 } |