]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/torture/c2x-stdarg-split-1b.c
55a01b20beb8d56dc65b3be7a03a5e6974973b72
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / torture / c2x-stdarg-split-1b.c
1 /* Test C2x variadic functions with no named parameters, or last named
2 parameter with a declaration not allowed in C17. Execution tests split
3 between source files. */
4 /* { dg-do compile } */
5 /* { dg-options "-std=c2x -pedantic-errors" } */
6
7 #include <stdarg.h>
8
9 extern void abort (void);
10
11 double
12 f (...)
13 {
14 va_list ap;
15 va_start (ap);
16 double ret = va_arg (ap, int);
17 ret += va_arg (ap, double);
18 ret += va_arg (ap, int);
19 ret += va_arg (ap, double);
20 va_end (ap);
21 return ret;
22 }
23
24 void
25 g (...)
26 {
27 va_list ap;
28 va_start (ap, random ! ignored, ignored ** text);
29 for (int i = 0; i < 10; i++)
30 if (va_arg (ap, double) != i)
31 abort ();
32 va_end (ap);
33 }
34
35 void
36 h1 (register int x, ...)
37 {
38 va_list ap;
39 va_start (ap);
40 for (int i = 0; i < 10; i++)
41 {
42 if (va_arg (ap, double) != i)
43 abort ();
44 i++;
45 if (va_arg (ap, int) != i)
46 abort ();
47 }
48 va_end (ap);
49 }
50
51 void
52 h2 (int x(), ...)
53 {
54 va_list ap;
55 va_start (ap);
56 for (int i = 0; i < 10; i++)
57 {
58 if (va_arg (ap, double) != i)
59 abort ();
60 i++;
61 if (va_arg (ap, int) != i)
62 abort ();
63 }
64 va_end (ap);
65 }
66
67 void
68 h3 (int x[10], ...)
69 {
70 va_list ap;
71 va_start (ap);
72 for (int i = 0; i < 10; i++)
73 {
74 if (va_arg (ap, double) != i)
75 abort ();
76 i++;
77 if (va_arg (ap, int) != i)
78 abort ();
79 }
80 va_end (ap);
81 }
82
83 void
84 h4 (char x, ...)
85 {
86 va_list ap;
87 va_start (ap);
88 for (int i = 0; i < 10; i++)
89 {
90 if (va_arg (ap, double) != i)
91 abort ();
92 i++;
93 if (va_arg (ap, int) != i)
94 abort ();
95 }
96 va_end (ap);
97 }
98
99 void
100 h5 (float x, ...)
101 {
102 va_list ap;
103 va_start (ap);
104 for (int i = 0; i < 10; i++)
105 {
106 if (va_arg (ap, double) != i)
107 abort ();
108 i++;
109 if (va_arg (ap, int) != i)
110 abort ();
111 }
112 va_end (ap);
113 }
114
115 void
116 h6 (volatile long x, ...)
117 {
118 va_list ap;
119 va_start (ap);
120 for (int i = 0; i < 10; i++)
121 {
122 if (va_arg (ap, double) != i)
123 abort ();
124 i++;
125 if (va_arg (ap, int) != i)
126 abort ();
127 }
128 va_end (ap);
129 }
130
131 struct s { char c[1000]; };
132
133 void
134 h7 (volatile struct s x, ...)
135 {
136 va_list ap;
137 va_start (ap);
138 for (int i = 0; i < 10; i++)
139 {
140 if (va_arg (ap, double) != i)
141 abort ();
142 i++;
143 if (va_arg (ap, int) != i)
144 abort ();
145 }
146 va_end (ap);
147 }