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
f1(int x,...)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
f2(int x,...)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
f3(int x,...)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
f4(int x,...)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
f5(int x,...)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
f6(int x,...)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
f7(int x,...)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
f8(int x,...)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
f9(int x,...)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
f10(int x,...)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
f11(int x,...)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
f12(int 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
f13(int x,...)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
f14(int x,...)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
main()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 }
396