1 /* This is a modfied version of va-arg-9.c to test va_copy. */
2
3 #include <stdarg.h>
4
5 #ifndef va_copy
6 #define va_copy __va_copy
7 #endif
8
9 extern __SIZE_TYPE__ strlen (const char *);
10
11 int
to_hex(unsigned int a)12 to_hex (unsigned int a)
13 {
14 static char hex[] = "0123456789abcdef";
15
16 if (a > 15)
17 abort ();
18 return hex[a];
19 }
20
21 void
fap(int i,char * format,va_list ap)22 fap (int i, char* format, va_list ap)
23 {
24 va_list apc;
25 char *formatc;
26
27 va_copy (apc, ap);
28 formatc = format;
29
30 if (strlen (format) != 16 - i)
31 abort ();
32 while (*format)
33 if (*format++ != to_hex (va_arg (ap, int)))
34 abort ();
35 while (*formatc)
36 if (*formatc++ != to_hex (va_arg (apc, int)))
37 abort ();
38 }
39
40 void
f0(char * format,...)41 f0 (char* format, ...)
42 {
43 va_list ap;
44
45 va_start (ap, format);
46 fap(0, format, ap);
47 va_end(ap);
48 }
49
50 void
f1(int a1,char * format,...)51 f1 (int a1, char* format, ...)
52 {
53 va_list ap;
54
55 va_start(ap, format);
56 fap(1, format, ap);
57 va_end(ap);
58 }
59
60 void
f2(int a1,int a2,char * format,...)61 f2 (int a1, int a2, char* format, ...)
62 {
63 va_list ap;
64
65 va_start(ap, format);
66 fap(2, format, ap);
67 va_end(ap);
68 }
69
70 void
f3(int a1,int a2,int a3,char * format,...)71 f3 (int a1, int a2, int a3, char* format, ...)
72 {
73 va_list ap;
74
75 va_start(ap, format);
76 fap(3, format, ap);
77 va_end(ap);
78 }
79
80 void
f4(int a1,int a2,int a3,int a4,char * format,...)81 f4 (int a1, int a2, int a3, int a4, char* format, ...)
82 {
83 va_list ap;
84
85 va_start(ap, format);
86 fap(4, format, ap);
87 va_end(ap);
88 }
89
90 void
f5(int a1,int a2,int a3,int a4,int a5,char * format,...)91 f5 (int a1, int a2, int a3, int a4, int a5,
92 char* format, ...)
93 {
94 va_list ap;
95
96 va_start(ap, format);
97 fap(5, format, ap);
98 va_end(ap);
99 }
100
101 void
f6(int a1,int a2,int a3,int a4,int a5,int a6,char * format,...)102 f6 (int a1, int a2, int a3, int a4, int a5,
103 int a6,
104 char* format, ...)
105 {
106 va_list ap;
107
108 va_start(ap, format);
109 fap(6, format, ap);
110 va_end(ap);
111 }
112
113 void
f7(int a1,int a2,int a3,int a4,int a5,int a6,int a7,char * format,...)114 f7 (int a1, int a2, int a3, int a4, int a5,
115 int a6, int a7,
116 char* format, ...)
117 {
118 va_list ap;
119
120 va_start(ap, format);
121 fap(7, format, ap);
122 va_end(ap);
123 }
124
125 void
f8(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,char * format,...)126 f8 (int a1, int a2, int a3, int a4, int a5,
127 int a6, int a7, int a8,
128 char* format, ...)
129 {
130 va_list ap;
131
132 va_start(ap, format);
133 fap(8, format, ap);
134 va_end(ap);
135 }
136
137 void
f9(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,char * format,...)138 f9 (int a1, int a2, int a3, int a4, int a5,
139 int a6, int a7, int a8, int a9,
140 char* format, ...)
141 {
142 va_list ap;
143
144 va_start(ap, format);
145 fap(9, format, ap);
146 va_end(ap);
147 }
148
149 void
f10(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,char * format,...)150 f10 (int a1, int a2, int a3, int a4, int a5,
151 int a6, int a7, int a8, int a9, int a10,
152 char* format, ...)
153 {
154 va_list ap;
155
156 va_start(ap, format);
157 fap(10, format, ap);
158 va_end(ap);
159 }
160
161 void
f11(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,char * format,...)162 f11 (int a1, int a2, int a3, int a4, int a5,
163 int a6, int a7, int a8, int a9, int a10,
164 int a11,
165 char* format, ...)
166 {
167 va_list ap;
168
169 va_start(ap, format);
170 fap(11, format, ap);
171 va_end(ap);
172 }
173
174 void
f12(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,char * format,...)175 f12 (int a1, int a2, int a3, int a4, int a5,
176 int a6, int a7, int a8, int a9, int a10,
177 int a11, int a12,
178 char* format, ...)
179 {
180 va_list ap;
181
182 va_start(ap, format);
183 fap(12, format, ap);
184 va_end(ap);
185 }
186
187 void
f13(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,char * format,...)188 f13 (int a1, int a2, int a3, int a4, int a5,
189 int a6, int a7, int a8, int a9, int a10,
190 int a11, int a12, int a13,
191 char* format, ...)
192 {
193 va_list ap;
194
195 va_start(ap, format);
196 fap(13, format, ap);
197 va_end(ap);
198 }
199
200 void
f14(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,int a14,char * format,...)201 f14 (int a1, int a2, int a3, int a4, int a5,
202 int a6, int a7, int a8, int a9, int a10,
203 int a11, int a12, int a13, int a14,
204 char* format, ...)
205 {
206 va_list ap;
207
208 va_start(ap, format);
209 fap(14, format, ap);
210 va_end(ap);
211 }
212
213 void
f15(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11,int a12,int a13,int a14,int a15,char * format,...)214 f15 (int a1, int a2, int a3, int a4, int a5,
215 int a6, int a7, int a8, int a9, int a10,
216 int a11, int a12, int a13, int a14, int a15,
217 char* format, ...)
218 {
219 va_list ap;
220
221 va_start(ap, format);
222 fap(15, format, ap);
223 va_end(ap);
224 }
225
main()226 main ()
227 {
228 char *f = "0123456789abcdef";
229
230 f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
231 f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
232 f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
233 f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
234 f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
235 f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
236 f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
237 f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15);
238 f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15);
239 f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15);
240 f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15);
241 f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15);
242 f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15);
243 f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15);
244 f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15);
245 f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15);
246
247 exit (0);
248 }
249