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