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