OSDN Git Service

* gcc.c-torture/execute/ieee/rbug.x: XFAIL FreeBSD 5.x.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.c-torture / execute / va-arg-3.c
1 /* Same as va-arg-2.c but using varargs.h.  */
2 /* The purpose of this test is to catch edge cases when arguments are passed
3    in regs and on the stack.  We test 16 cases, trying to catch multiple
4    targets (some use 3 regs for argument passing, some use 12, etc.).
5    We test both the arguments and the `lastarg' (the argument to va_start).  */
6
7 #ifdef NO_VARARGS
8 int main()
9 {
10   exit (0);
11 }
12
13 #else
14 #include <varargs.h>
15
16 extern __SIZE_TYPE__ strlen ();
17
18 int
19 to_hex (unsigned int a)
20 {
21   static char hex[] = "0123456789abcdef";
22
23   if (a > 15)
24     abort ();
25   return hex[a];
26 }
27
28 void
29 f0 (va_alist)
30      va_dcl
31 {
32   va_list ap;
33   char *format;
34
35   va_start (ap);
36   format = va_arg (ap, char *);
37   if (strlen (format) != 16 - 0)
38     abort ();
39   while (*format)
40     if (*format++ != to_hex (va_arg (ap, int)))
41       abort ();
42   va_end(ap);
43 }
44
45 void
46 f1 (a1, va_alist)
47      int a1;
48      va_dcl
49 {
50   va_list ap;
51   char *format;
52
53   va_start (ap);
54   format = va_arg (ap, char *);
55   if (strlen (format) != 16 - 1)
56     abort ();
57   while (*format)
58     if (*format++ != to_hex (va_arg (ap, int)))
59       abort ();
60   va_end(ap);
61 }
62
63 void
64 f2 (a1, a2, va_alist)
65      int a1, a2;
66      va_dcl
67 {
68   va_list ap;
69   char *format;
70
71   va_start (ap);
72   format = va_arg (ap, char *);
73   if (strlen (format) != 16 - 2)
74     abort ();
75   while (*format)
76     if (*format++ != to_hex (va_arg (ap, int)))
77       abort ();
78   va_end(ap);
79 }
80
81 void
82 f3 (a1, a2, a3, va_alist)
83      int a1, a2, a3;
84      va_dcl
85 {
86   va_list ap;
87   char *format;
88
89   va_start (ap);
90   format = va_arg (ap, char *);
91   if (strlen (format) != 16 - 3)
92     abort ();
93   while (*format)
94     if (*format++ != to_hex (va_arg (ap, int)))
95       abort ();
96   va_end(ap);
97 }
98
99 void
100 f4 (a1, a2, a3, a4, va_alist)
101      int a1, a2, a3, a4;
102      va_dcl
103 {
104   va_list ap;
105   char *format;
106
107   va_start (ap);
108   format = va_arg (ap, char *);
109   if (strlen (format) != 16 - 4)
110     abort ();
111   while (*format)
112     if (*format++ != to_hex (va_arg (ap, int)))
113       abort ();
114   va_end(ap);
115 }
116
117 void
118 f5 (a1, a2, a3, a4, a5, va_alist)
119      int a1, a2, a3, a4, a5;
120      va_dcl
121 {
122   va_list ap;
123   char *format;
124
125   va_start (ap);
126   format = va_arg (ap, char *);
127   if (strlen (format) != 16 - 5)
128     abort ();
129   while (*format)
130     if (*format++ != to_hex (va_arg (ap, int)))
131       abort ();
132   va_end(ap);
133 }
134
135 void
136 f6 (a1, a2, a3, a4, a5, a6, va_alist)
137      int a1, a2, a3, a4, a5, a6;
138      va_dcl
139 {
140   va_list ap;
141   char *format;
142
143   va_start (ap);
144   format = va_arg (ap, char *);
145   if (strlen (format) != 16 - 6)
146     abort ();
147   while (*format)
148     if (*format++ != to_hex (va_arg (ap, int)))
149       abort ();
150   va_end(ap);
151 }
152
153 void
154 f7 (a1, a2, a3, a4, a5, a6, a7, va_alist)
155      int a1, a2, a3, a4, a5, a6, a7;
156      va_dcl
157 {
158   va_list ap;
159   char *format;
160
161   va_start (ap);
162   format = va_arg (ap, char *);
163   if (strlen (format) != 16 - 7)
164     abort ();
165   while (*format)
166     if (*format++ != to_hex (va_arg (ap, int)))
167       abort ();
168   va_end(ap);
169 }
170
171 void
172 f8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist)
173      int a1, a2, a3, a4, a5, a6, a7, a8;
174      va_dcl
175 {
176   va_list ap;
177   char *format;
178
179   va_start (ap);
180   format = va_arg (ap, char *);
181   if (strlen (format) != 16 - 8)
182     abort ();
183   while (*format)
184     if (*format++ != to_hex (va_arg (ap, int)))
185       abort ();
186   va_end(ap);
187 }
188
189 void
190 f9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist)
191      int a1, a2, a3, a4, a5, a6, a7, a8, a9;
192      va_dcl
193 {
194   va_list ap;
195   char *format;
196
197   va_start (ap);
198   format = va_arg (ap, char *);
199   if (strlen (format) != 16 - 9)
200     abort ();
201   while (*format)
202     if (*format++ != to_hex (va_arg (ap, int)))
203       abort ();
204   va_end(ap);
205 }
206
207 void
208 f10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist)
209      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
210      va_dcl
211 {
212   va_list ap;
213   char *format;
214
215   va_start (ap);
216   format = va_arg (ap, char *);
217   if (strlen (format) != 16 - 10)
218     abort ();
219   while (*format)
220     if (*format++ != to_hex (va_arg (ap, int)))
221       abort ();
222   va_end(ap);
223 }
224
225 void
226 f11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
227      va_alist)
228      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
229      va_dcl
230 {
231   va_list ap;
232   char *format;
233
234   va_start (ap);
235   format = va_arg (ap, char *);
236   if (strlen (format) != 16 - 11)
237     abort ();
238   while (*format)
239     if (*format++ != to_hex (va_arg (ap, int)))
240       abort ();
241   va_end(ap);
242 }
243
244 void
245 f12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist)
246      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
247      va_dcl
248 {
249   va_list ap;
250   char *format;
251
252   va_start (ap);
253   format = va_arg (ap, char *);
254   if (strlen (format) != 16 - 12)
255     abort ();
256   while (*format)
257     if (*format++ != to_hex (va_arg (ap, int)))
258       abort ();
259   va_end(ap);
260 }
261
262 void
263 f13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist)
264      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13;
265      va_dcl
266 {
267   va_list ap;
268   char *format;
269
270   va_start (ap);
271   format = va_arg (ap, char *);
272   if (strlen (format) != 16 - 13)
273     abort ();
274   while (*format)
275     if (*format++ != to_hex (va_arg (ap, int)))
276       abort ();
277   va_end(ap);
278 }
279
280 void
281 f14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist)
282      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14;
283      va_dcl
284 {
285   va_list ap;
286   char *format;
287
288   va_start (ap);
289   format = va_arg (ap, char *);
290   if (strlen (format) != 16 - 14)
291     abort ();
292   while (*format)
293     if (*format++ != to_hex (va_arg (ap, int)))
294       abort ();
295   va_end(ap);
296 }
297
298 void
299 f15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist)
300      int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
301      va_dcl
302 {
303   va_list ap;
304   char *format;
305
306   va_start (ap);
307   format = va_arg (ap, char *);
308   if (strlen (format) != 16 - 15)
309     abort ();
310   while (*format)
311     if (*format++ != to_hex (va_arg (ap, int)))
312       abort ();
313   va_end(ap);
314 }
315
316 main ()
317 {
318   char *f = "0123456789abcdef";
319
320   f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
321   f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
322   f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
323   f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
324   f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
325   f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
326   f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
327   f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
328   f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
329   f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
330   f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
331   f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
332   f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
333   f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
334   f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
335   f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
336
337   exit (0);
338 }
339 #endif /* ! NO_VARARGS */