1 /* Test C23 variadic functions with no named parameters, or last named
2 parameter with a declaration not allowed in C17. Execution tests. */
4 /* { dg-options "-std=c23 -pedantic-errors" } */
8 extern void abort (void);
9 extern void exit (int);
10 struct s
{ char c
[1000]; };
17 double r
= va_arg (ap
, int);
18 r
+= va_arg (ap
, double);
19 r
+= va_arg (ap
, int);
20 r
+= va_arg (ap
, double);
32 va_start (ap
, random
! ignored
, ignored
** text
);
33 for (int i
= 0; i
< 10; i
++)
34 if (va_arg (ap
, double) != i
)
44 h1 (register int x
, ...)
48 for (int i
= 0; i
< 10; i
++)
50 if (va_arg (ap
, double) != i
)
53 if (va_arg (ap
, int) != i
)
68 for (int i
= 0; i
< 10; i
++)
70 if (va_arg (ap
, double) != i
)
73 if (va_arg (ap
, int) != i
)
88 for (int i
= 0; i
< 10; i
++)
90 if (va_arg (ap
, double) != i
)
93 if (va_arg (ap
, int) != i
)
108 for (int i
= 0; i
< 10; i
++)
110 if (va_arg (ap
, double) != i
)
113 if (va_arg (ap
, int) != i
)
128 for (int i
= 0; i
< 10; i
++)
130 if (va_arg (ap
, double) != i
)
133 if (va_arg (ap
, int) != i
)
144 h6 (volatile long x
, ...)
148 for (int i
= 0; i
< 10; i
++)
150 if (va_arg (ap
, double) != i
)
153 if (va_arg (ap
, int) != i
)
164 h7 (volatile struct s x
, ...)
168 for (int i
= 0; i
< 10; i
++)
170 if (va_arg (ap
, double) != i
)
173 if (va_arg (ap
, int) != i
)
186 struct s x
= f (1, 2.0, 3, 4.0);
187 if (x
.c
[0] != 10 || x
.c
[999] != 42)
189 x
= g (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0);
190 if (x
.c
[0] != 17 || x
.c
[999] != 58)
192 x
= g (0.0f
, 1.0f
, 2.0f
, 3.0f
, 4.0f
, 5.0f
, 6.0f
, 7.0f
, 8.0f
, 9.0f
);
193 if (x
.c
[0] != 17 || x
.c
[999] != 58)
195 x
= h1 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
196 if (x
.c
[0] != 32 || x
.c
[999] != 95)
198 x
= h2 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
199 if (x
.c
[0] != 5 || x
.c
[999] != 125)
201 x
= h3 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
202 if (x
.c
[0] != 8 || x
.c
[999] != 12)
204 x
= h4 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
205 if (x
.c
[0] != 18 || x
.c
[999] != 28)
207 x
= h5 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
208 if (x
.c
[0] != 38 || x
.c
[999] != 48)
210 x
= h6 (0, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
211 if (x
.c
[0] != 58 || x
.c
[999] != 68)
213 x
= h7 ((struct s
) {}, 0.0, 1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, 9);
214 if (x
.c
[0] != 78 || x
.c
[999] != 88)