Merge to HEAD at tree-cleanup-merge-20041024 .
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / stdarg-2.c
blob24ba732438cdf17586d41d19bfa18dfad023ddff
1 #include <stdarg.h>
3 extern void abort (void);
5 int foo_arg, bar_arg;
6 long x;
7 double d;
8 va_list gap;
10 void
11 foo (int v, va_list ap)
13 switch (v)
15 case 5:
16 foo_arg = va_arg (ap, int) + va_arg (ap, double);
17 foo_arg += va_arg (ap, long long);
18 break;
19 case 8:
20 foo_arg = va_arg (ap, long long) + va_arg (ap, double);
21 break;
22 case 11:
23 foo_arg = va_arg (ap, int) + va_arg (ap, long double);
24 break;
25 default:
26 abort ();
30 void
31 bar (int v)
33 if (v == 0x4002)
35 if (va_arg (gap, int) != 13 || va_arg (gap, double) != -14.0)
36 abort ();
38 bar_arg = v;
41 void
42 f1 (int i, ...)
44 va_start (gap, i);
45 x = va_arg (gap, long);
46 va_end (gap);
49 void
50 f2 (int i, ...)
52 va_start (gap, i);
53 bar (i);
54 va_end (gap);
57 void
58 f3 (int i, ...)
60 va_list aps[10];
61 va_start (aps[4], i);
62 x = va_arg (aps[4], long);
63 va_end (aps[4]);
66 void
67 f4 (int i, ...)
69 va_list aps[10];
70 va_start (aps[4], i);
71 bar (i);
72 va_end (aps[4]);
75 void
76 f5 (int i, ...)
78 va_list aps[10];
79 va_start (aps[4], i);
80 foo (i, aps[4]);
81 va_end (aps[4]);
84 struct A { int i; va_list g; va_list h[2]; };
86 void
87 f6 (int i, ...)
89 struct A a;
90 va_start (a.g, i);
91 x = va_arg (a.g, long);
92 va_end (a.g);
95 void
96 f7 (int i, ...)
98 struct A a;
99 va_start (a.g, i);
100 bar (i);
101 va_end (a.g);
104 void
105 f8 (int i, ...)
107 struct A a;
108 va_start (a.g, i);
109 foo (i, a.g);
110 va_end (a.g);
113 void
114 f10 (int i, ...)
116 struct A a;
117 va_start (a.h[1], i);
118 x = va_arg (a.h[1], long);
119 va_end (a.h[1]);
122 void
123 f11 (int i, ...)
125 struct A a;
126 va_start (a.h[1], i);
127 bar (i);
128 va_end (a.h[1]);
131 void
132 f12 (int i, ...)
134 struct A a;
135 va_start (a.h[1], i);
136 foo (i, a.h[1]);
137 va_end (a.h[1]);
141 main (void)
143 f1 (1, 79);
144 if (x != 79)
145 abort ();
146 f2 (0x4002, 13, -14.0);
147 if (bar_arg != 0x4002)
148 abort ();
149 f3 (3, 2031L);
150 if (x != 2031)
151 abort ();
152 f4 (4, 18);
153 if (bar_arg != 4)
154 abort ();
155 f5 (5, 1, 19.0, 18LL);
156 if (foo_arg != 38)
157 abort ();
158 f6 (6, 18L);
159 if (x != 18L)
160 abort ();
161 f7 (7);
162 if (bar_arg != 7)
163 abort ();
164 f8 (8, 2031LL, 13.0);
165 if (foo_arg != 2044)
166 abort ();
167 f10 (9, 180L);
168 if (x != 180L)
169 abort ();
170 f11 (10);
171 if (bar_arg != 10)
172 abort ();
173 f12 (11, 2030, 12.0L);
174 if (foo_arg != 2042)
175 abort ();
176 return 0;