2 /* { dg-additional-options "-Wno-pedantic -Wno-long-long -fshort-enums" } */
4 /* va args, promoted as regular knr args. */
6 void __attribute__ ((noinline
)) chars (int i
, ...)
8 __builtin_va_list args
;
9 __builtin_va_start (args
, i
);
11 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
12 if (__builtin_va_arg (args
, int) != 2) __builtin_abort ();
13 __builtin_va_end (args
);
16 void __attribute__ ((noinline
)) shorts (int i
, ...)
18 __builtin_va_list args
;
19 __builtin_va_start (args
, i
);
21 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
22 if (__builtin_va_arg (args
, int) != 2) __builtin_abort ();
23 if (__builtin_va_arg (args
, int) != 3) __builtin_abort ();
24 __builtin_va_end (args
);
27 void __attribute__ ((noinline
)) ints (int i
, ...)
29 __builtin_va_list args
;
30 __builtin_va_start (args
, i
);
32 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
33 if (__builtin_va_arg (args
, int) != 2) __builtin_abort ();
34 if (__builtin_va_arg (args
, int) != 3) __builtin_abort ();
35 __builtin_va_end (args
);
38 void __attribute__ ((noinline
)) longlongs (int i
, ...)
40 __builtin_va_list args
;
41 __builtin_va_start (args
, i
);
43 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
44 if (__builtin_va_arg (args
, long long) != 2) __builtin_abort ();
45 if (__builtin_va_arg (args
, long long) != 3) __builtin_abort ();
46 __builtin_va_end (args
);
49 typedef int __attribute__ ((mode(TI
))) ti
;
51 void __attribute__ ((noinline
)) tis (int i
, ...)
53 __builtin_va_list args
;
54 __builtin_va_start (args
, i
);
56 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
57 if (__builtin_va_arg (args
, ti
) != 2) __builtin_abort ();
58 if (__builtin_va_arg (args
, ti
) != 3) __builtin_abort ();
59 __builtin_va_end (args
);
62 void __attribute__ ((noinline
)) floats (int i
, ...)
64 __builtin_va_list args
;
65 __builtin_va_start (args
, i
);
67 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
68 if (__builtin_va_arg (args
, double) != 2) __builtin_abort ();
69 if (__builtin_va_arg (args
, double) != 3) __builtin_abort ();
70 __builtin_va_end (args
);
73 void __attribute__ ((noinline
)) doubles (int i
, ...)
75 __builtin_va_list args
;
76 __builtin_va_start (args
, i
);
78 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
79 if (__builtin_va_arg (args
, double) != 2) __builtin_abort ();
80 if (__builtin_va_arg (args
, double) != 3) __builtin_abort ();
81 __builtin_va_end (args
);
84 typedef enum {ec1
, ec2
, ecmax
= 0xf} echar
;
85 typedef enum {es1
, es2
, esmax
= 0xfff} eshort
;
86 typedef enum {ei1
, ei2
, eimax
= 0xfffff} eint
;
88 void __attribute__ ((noinline
)) echars (int i
, ...)
90 __builtin_va_list args
;
91 __builtin_va_start (args
, i
);
93 if (__builtin_va_arg (args
, int) != ec1
) __builtin_abort ();
94 if (__builtin_va_arg (args
, int) != ec2
) __builtin_abort ();
95 if (__builtin_va_arg (args
, int) != ecmax
) __builtin_abort ();
96 __builtin_va_end (args
);
99 void __attribute__ ((noinline
)) eshorts (int i
, ...)
101 __builtin_va_list args
;
102 __builtin_va_start (args
, i
);
104 if (__builtin_va_arg (args
, int) != es1
) __builtin_abort ();
105 if (__builtin_va_arg (args
, int) != es2
) __builtin_abort ();
106 if (__builtin_va_arg (args
, int) != esmax
) __builtin_abort ();
107 __builtin_va_end (args
);
110 void __attribute__ ((noinline
)) eints (int i
, ...)
112 __builtin_va_list args
;
113 __builtin_va_start (args
, i
);
115 if (__builtin_va_arg (args
, int) != ei1
) __builtin_abort ();
116 if (__builtin_va_arg (args
, int) != ei2
) __builtin_abort ();
117 if (__builtin_va_arg (args
, int) != eimax
) __builtin_abort ();
118 __builtin_va_end (args
);
121 typedef struct {char a
;} one
;
122 typedef struct {short a
;} two
;
123 typedef struct {int a
;} four
;
124 typedef struct {long long a
;} eight
;
125 typedef struct {int a
, b
[12];} big
;
127 void __attribute__ ((noinline
)) structs (int i
, ...)
129 __builtin_va_list args
;
130 __builtin_va_start (args
, i
);
132 if (__builtin_va_arg (args
, int) != 1) __builtin_abort ();
133 if (__builtin_va_arg (args
, one
).a
!= 2) __builtin_abort ();
134 if (__builtin_va_arg (args
, int) != 3) __builtin_abort ();
135 if (__builtin_va_arg (args
, two
).a
!= 4) __builtin_abort ();
136 if (__builtin_va_arg (args
, int) != 5) __builtin_abort ();
137 if (__builtin_va_arg (args
, four
).a
!= 6) __builtin_abort ();
138 if (__builtin_va_arg (args
, int) != 7) __builtin_abort ();
139 if (__builtin_va_arg (args
, eight
).a
!= 8) __builtin_abort ();
140 if (__builtin_va_arg (args
, int) != 9) __builtin_abort ();
141 if (__builtin_va_arg (args
, big
).a
!= 10) __builtin_abort ();
142 __builtin_va_end (args
);
147 char vc1
, vc2
, vc3
, vc4
, vc5
;
150 long long vll1
, vll2
;
160 echar vec1
, vec2
, vec3
;
161 eshort ves1
, ves2
, ves3
;
162 eint vei1
, vei2
, vei3
;
167 vc1
= 1, vs1
= 2, vs2
= 3;
168 shorts (1, vc1
, vs1
, vs2
);
170 vc1
= 1, vi1
= 2, vi2
= 3;
171 ints (1, vc1
, vi1
, vi2
);
173 vc1
= 1, vll1
= 2, vll2
= 3;
174 longlongs (1, vc1
, vll1
, vll2
);
176 vc1
= 1, vti1
= 2, vti2
= 3;
177 tis (1, vc1
, vti1
, vti2
);
179 vc1
= 1, vf1
= 2, vf2
= 3;
180 floats (1, vc1
, vf1
, vf2
);
181 doubles (1, vc1
, vf1
, vf2
); /* Floats are promoted, so this should work. */
183 vc1
= 1, vd1
= 2, vd2
= 3;
184 floats (1, vc1
, vf1
, vf2
); /* Floats are promoted, so this should work. */
185 doubles (1, vc1
, vf1
, vf2
);
187 vec1
= ec1
, vec2
= ec2
, vec3
= ecmax
;
188 echars (1, vec1
, vec2
, vec3
);
189 vc1
= ec1
, vc2
= ec2
, vc3
= ecmax
;
190 echars (1, vc1
, vc2
, vc3
);
192 ves1
= ec1
, ves2
= ec2
, ves3
= esmax
;
193 eshorts (1, ves1
, ves2
, ves3
);
194 vs1
= ec1
, vs2
= ec2
, vs3
= esmax
;
195 eshorts (1, vs1
, vs2
, vs3
);
197 vei1
= ec1
, vei2
= ec2
, vei3
= eimax
;
198 eints (1, vei1
, vei2
, vei3
);
199 vi1
= ec1
, vi2
= ec2
, vi3
= eimax
;
200 eints (1, vi1
, vi2
, vi3
);
202 vc1
= 1, vone
.a
= 2, vc2
= 3, vtwo
.a
= 4,
203 vc3
= 5, vfour
.a
= 6, vc4
= 7, veight
.a
= 8,
204 vc5
= 9, vbig
.a
= 10;
205 structs (1, vc1
, vone
, vc2
, vtwo
, vc3
, vfour
, vc4
, veight
, vc5
, vbig
);