1 /* Test passing of arguments to functions. Use various sorts of arguments,
2 including basic types, pointers to those types, structures, lots of
3 args, etc, in various combinations. */
4
5 /* AIX requires this to be the first thing in the file. */
6 #ifdef __GNUC__
7 # define alloca __builtin_alloca
8 # define HAVE_STACK_ALLOCA 1
9 #else /* not __GNUC__ */
10 # ifdef _AIX
11 #pragma alloca
12 # define HAVE_STACK_ALLOCA 1
13 # else /* Not AIX */
14 # ifdef sparc
15 # include <alloca.h>
16 # define HAVE_STACK_ALLOCA 1
17 # ifdef __STDC__
18 void *alloca ();
19 # else
20 char *alloca ();
21 # endif /* __STDC__ */
22 # endif /* sparc */
23 # endif /* Not AIX */
24 #endif /* not __GNUC__ */
25
26 char c = 'a';
27 char *cp = &c;
28
29 unsigned char uc = 'b';
30 unsigned char *ucp = &uc;
31
32 short s = 1;
33 short *sp = &s;
34
35 unsigned short us = 6;
36 unsigned short *usp = &us;
37
38 int i = 2;
39 int *ip = &i;
40
41 unsigned int ui = 7;
42 unsigned int *uip = &ui;
43
44 long l = 3;
45 long *lp = &l;
46
47 unsigned long ul = 8;
48 unsigned long *ulp = &ul;
49
50 float f = 4.0;
51 float *fp = &f;
52
53 double d = 5.0;
54 double *dp = &d;
55
56 #ifdef TEST_COMPLEX
57 float _Complex fc = 1.0F + 2.0iF;
58 double _Complex dc = 3.0 + 4.0i;
59 long double _Complex ldc = 5.0L + 6.0iL;
60 #endif /* TEST_COMPLEX */
61
62 struct stag {
63 int s1;
64 int s2;
65 } st = { 101, 102 };
66 struct stag *stp = &st;
67
68 union utag {
69 int u1;
70 long u2;
71 } un;
72 union utag *unp = &un;
73
74 char carray[] = {'a', 'n', ' ', 'a', 'r', 'r', 'a', 'y', '\0'};
75
76
77 /* Test various permutations and interleaving of integral arguments */
78
79
call0a(char c,short s,int i,long l)80 void call0a (char c, short s, int i, long l)
81 {
82 c = 'a';
83 s = 5;
84 i = 6;
85 l = 7;
86 }
87
call0b(short s,int i,long l,char c)88 void call0b (short s, int i, long l, char c)
89 {
90 s = 6; i = 7; l = 8; c = 'j';
91 }
92
call0c(int i,long l,char c,short s)93 void call0c (int i, long l, char c, short s)
94 {
95 i = 3; l = 4; c = 'k'; s = 5;
96 }
97
call0d(long l,char c,short s,int i)98 void call0d (long l, char c, short s, int i)
99 {
100 l = 7; c = 'z'; s = 8; i = 9;
101 }
102
call0e(char c1,long l,char c2,int i,char c3,short s,char c4,char c5)103 void call0e (char c1, long l, char c2, int i, char c3, short s, char c4, char c5)
104 {
105 c1 = 'a'; l = 5; c2 = 'b'; i = 7; c3 = 'c'; s = 7; c4 = 'f'; c5 = 'g';
106 }
107
108
109 /* Test various permutations and interleaving of unsigned integral arguments */
110
111
call1a(unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)112 void call1a (unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
113 {
114 uc = 5; us = 6; ui = 7; ul = 8;
115 }
116
call1b(unsigned short us,unsigned int ui,unsigned long ul,unsigned char uc)117 void call1b (unsigned short us, unsigned int ui, unsigned long ul, unsigned char uc)
118 {
119 uc = 5; us = 6; ui = 7; ul = 8;
120 }
121
call1c(unsigned int ui,unsigned long ul,unsigned char uc,unsigned short us)122 void call1c (unsigned int ui, unsigned long ul, unsigned char uc, unsigned short us)
123 {
124 uc = 5; us = 6; ui = 7; ul = 8;
125 }
126
call1d(unsigned long ul,unsigned char uc,unsigned short us,unsigned int ui)127 void call1d (unsigned long ul, unsigned char uc, unsigned short us, unsigned int ui)
128 {
129 uc = 5; us = 6; ui = 7; ul = 8;
130 }
131
call1e(unsigned char uc1,unsigned long ul,unsigned char uc2,unsigned int ui,unsigned char uc3,unsigned short us,unsigned char uc4,unsigned char uc5)132 void call1e (unsigned char uc1, unsigned long ul, unsigned char uc2, unsigned int ui, unsigned char uc3, unsigned short us, unsigned char uc4, unsigned char uc5)
133 {
134 uc1 = 5; ul = 7; uc2 = 8; ui = 9; uc3 = 10; us = 11; uc4 = 12; uc5 = 55;
135 }
136
137 /* Test various permutations and interleaving of integral arguments with
138 floating point arguments. */
139
140
call2a(char c,float f1,short s,double d1,int i,float f2,long l,double d2)141 void call2a (char c, float f1, short s, double d1, int i, float f2, long l, double d2)
142 {
143 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
144 }
145
call2b(float f1,short s,double d1,int i,float f2,long l,double d2,char c)146 void call2b (float f1, short s, double d1, int i, float f2, long l, double d2, char c)
147 {
148 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
149 }
150
call2c(short s,double d1,int i,float f2,long l,double d2,char c,float f1)151 void call2c (short s, double d1, int i, float f2, long l, double d2, char c, float f1)
152 {
153 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
154 }
155
call2d(double d1,int i,float f2,long l,double d2,char c,float f1,short s)156 void call2d (double d1, int i, float f2, long l, double d2, char c, float f1, short s)
157 {
158 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
159 }
160
call2e(int i,float f2,long l,double d2,char c,float f1,short s,double d1)161 void call2e (int i, float f2, long l, double d2, char c, float f1, short s, double d1)
162 {
163 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
164 }
165
call2f(float f2,long l,double d2,char c,float f1,short s,double d1,int i)166 void call2f (float f2, long l, double d2, char c, float f1, short s, double d1, int i)
167 {
168 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
169 }
170
call2g(long l,double d2,char c,float f1,short s,double d1,int i,float f2)171 void call2g (long l, double d2, char c, float f1, short s, double d1, int i, float f2)
172 {
173 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
174 }
175
call2h(double d2,char c,float f1,short s,double d1,int i,float f2,long l)176 void call2h (double d2, char c, float f1, short s, double d1, int i, float f2, long l)
177 {
178 c = 'a'; f1 = 0.0; s = 5; d1 = 0.0; i = 6; f2 = 0.1; l = 7; d2 = 0.2;
179 }
180
call2i(char c1,float f1,char c2,char c3,double d1,char c4,char c5,char c6,float f2,short s,char c7,double d2)181 void call2i (char c1, float f1, char c2, char c3, double d1, char c4, char c5, char c6, float f2, short s, char c7, double d2)
182 {
183 c1 = 'a'; f1 = 0.0; c2 = 5; d1 = 0.0; c3 = 6; f2 = 0.1; c4 = 7; d2 = 0.2;
184 c5 = 's'; c6 = 'f'; c7 = 'z'; s = 77;
185 }
186
187
188 /* Test pointers to various integral and floating types. */
189
190
call3a(char * cp,short * sp,int * ip,long * lp)191 void call3a (char *cp, short *sp, int *ip, long *lp)
192 {
193 cp = 0; sp = 0; ip = 0; lp = 0;
194 }
195
call3b(unsigned char * ucp,unsigned short * usp,unsigned int * uip,unsigned long * ulp)196 void call3b (unsigned char *ucp, unsigned short *usp, unsigned int *uip, unsigned long *ulp)
197 {
198 ucp = 0; usp = 0; uip = 0; ulp = 0;
199 }
200
call3c(float * fp,double * dp)201 void call3c (float *fp, double *dp)
202 {
203 fp = 0; dp = 0;
204 }
205
206
207
208 #ifdef TEST_COMPLEX
209
210 /* Test various _Complex type args. */
211
callca(float _Complex f1,float _Complex f2,float _Complex f3)212 void callca (float _Complex f1, float _Complex f2, float _Complex f3)
213 {
214
215 }
216
callcb(double _Complex d1,double _Complex d2,double _Complex d3)217 void callcb (double _Complex d1, double _Complex d2, double _Complex d3)
218 {
219
220 }
221
callcc(long double _Complex ld1,long double _Complex ld2,long double _Complex ld3)222 void callcc (long double _Complex ld1, long double _Complex ld2, long double _Complex ld3)
223 {
224
225 }
226
callcd(float _Complex fc1,double _Complex dc1,long double _Complex ldc1)227 void callcd (float _Complex fc1, double _Complex dc1, long double _Complex ldc1)
228 {
229 }
230
callce(double _Complex dc1,long double _Complex ldc1,float _Complex fc1)231 void callce (double _Complex dc1, long double _Complex ldc1, float _Complex fc1)
232 {
233 }
234
callcf(long double _Complex ldc1,float _Complex fc1,double _Complex dc1)235 void callcf (long double _Complex ldc1, float _Complex fc1, double _Complex dc1)
236 {
237 }
238
239
240 /* Test passing _Complex type and integral. */
callc1a(char c,short s,int i,unsigned int ui,long l,float _Complex fc1,double _Complex dc1,long double _Complex ldc1)241 void callc1a (char c, short s, int i, unsigned int ui, long l,
242 float _Complex fc1, double _Complex dc1,
243 long double _Complex ldc1)
244 {}
245
callc1b(long double _Complex ldc1,char c,short s,int i,float _Complex fc1,unsigned int ui,long l,double _Complex dc1)246 void callc1b (long double _Complex ldc1, char c, short s, int i,
247 float _Complex fc1, unsigned int ui, long l, double _Complex dc1)
248 {}
249
250
callc2a(char c,short s,int i,unsigned int ui,long l,float f,double d,float _Complex fc1,double _Complex dc1,long double _Complex ldc1)251 void callc2a (char c, short s, int i, unsigned int ui, long l, float f,
252 double d, float _Complex fc1, double _Complex dc1,
253 long double _Complex ldc1)
254 {}
255
callc2b(float _Complex fc1,char c,short s,int i,unsigned int ui,long double _Complex ldc1,long l,float f,double d,double _Complex dc1)256 void callc2b (float _Complex fc1, char c, short s, int i, unsigned int ui,
257 long double _Complex ldc1, long l, float f, double d,
258 double _Complex dc1)
259 {}
260
261
262 #endif /* TEST_COMPLEX */
263
264 /* Test passing structures and unions by reference. */
265
266
call4a(struct stag * stp)267 void call4a (struct stag *stp)
268 {stp = 0;}
269
call4b(union utag * unp)270 void call4b (union utag *unp)
271 {
272 unp = 0;
273 }
274
275
276 /* Test passing structures and unions by value. */
277
278
call5a(struct stag st)279 void call5a (struct stag st)
280 {st.s1 = 5;}
281
call5b(union utag un)282 void call5b (union utag un)
283 {un.u1 = 7;}
284
285
286 /* Test shuffling of args */
287
288
call6k()289 void call6k ()
290 {
291 }
292
call6j(unsigned long ul)293 void call6j (unsigned long ul)
294 {
295 ul = ul;
296 call6k ();
297 }
298
call6i(unsigned int ui,unsigned long ul)299 void call6i (unsigned int ui, unsigned long ul)
300 {
301 ui = ui;
302 call6j (ul);
303 }
304
call6h(unsigned short us,unsigned int ui,unsigned long ul)305 void call6h (unsigned short us, unsigned int ui, unsigned long ul)
306 {
307 us = us;
308 call6i (ui, ul);
309 }
310
call6g(unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)311 void call6g (unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
312 {
313 uc = uc;
314 call6h (us, ui, ul);
315 }
316
call6f(double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)317 void call6f (double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
318 {
319 d = d;
320 call6g (uc, us, ui, ul);
321 }
322
call6e(float f,double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)323 void call6e (float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
324 {
325 f = f;
326 call6f (d, uc, us, ui, ul);
327 }
328
call6d(long l,float f,double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)329 void call6d (long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
330 {
331 l = l;
332 call6e (f, d, uc, us, ui, ul);
333 }
334
call6c(int i,long l,float f,double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)335 void call6c (int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
336 {
337 i = i;
338 call6d (l, f, d, uc, us, ui, ul);
339 }
340
call6b(short s,int i,long l,float f,double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)341 void call6b (short s, int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
342 {
343 s = s;
344 call6c (i, l, f, d, uc, us, ui, ul);
345 }
346
call6a(char c,short s,int i,long l,float f,double d,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)347 void call6a (char c, short s, int i, long l, float f, double d, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
348 {
349 c = c;
350 call6b (s, i, l, f, d, uc, us, ui, ul);
351 }
352
353 /* Test shuffling of args, round robin */
354
355
call7k(char c,int i,short s,long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui)356 void call7k (char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui)
357 {
358 c = 'a'; i = 7; s = 8; l = 7; f = 0.3; uc = 44; d = 0.44; us = 77;
359 ul = 43; ui = 33;
360 }
361
call7j(unsigned int ui,char c,int i,short s,long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul)362 void call7j (unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul)
363 {
364 call7k (c, i, s, l, f, uc, d, us, ul, ui);
365 }
366
call7i(unsigned long ul,unsigned int ui,char c,int i,short s,long l,float f,unsigned char uc,double d,unsigned short us)367 void call7i (unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us)
368 {
369 call7j (ui, c, i, s, l, f, uc, d, us, ul);
370 }
371
call7h(unsigned short us,unsigned long ul,unsigned int ui,char c,int i,short s,long l,float f,unsigned char uc,double d)372 void call7h (unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc, double d)
373 {
374 call7i (ul, ui, c, i, s, l, f, uc, d, us);
375 }
376
call7g(double d,unsigned short us,unsigned long ul,unsigned int ui,char c,int i,short s,long l,float f,unsigned char uc)377 void call7g (double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f, unsigned char uc)
378 {
379 call7h (us, ul, ui, c, i, s, l, f, uc, d);
380 }
381
call7f(unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui,char c,int i,short s,long l,float f)382 void call7f (unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l, float f)
383 {
384 call7g (d, us, ul, ui, c, i, s, l, f, uc);
385 }
386
call7e(float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui,char c,int i,short s,long l)387 void call7e (float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s, long l)
388 {
389 call7f (uc, d, us, ul, ui, c, i, s, l, f);
390 }
391
call7d(long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui,char c,int i,short s)392 void call7d (long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i, short s)
393 {
394 call7e (f, uc, d, us, ul, ui, c, i, s, l);
395 }
396
call7c(short s,long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui,char c,int i)397 void call7c (short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c, int i)
398 {
399 call7d (l, f, uc, d, us, ul, ui, c, i, s);
400 }
401
call7b(int i,short s,long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui,char c)402 void call7b (int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui, char c)
403 {
404 call7c (s, l, f, uc, d, us, ul, ui, c, i);
405 }
406
call7a(char c,int i,short s,long l,float f,unsigned char uc,double d,unsigned short us,unsigned long ul,unsigned int ui)407 void call7a (char c, int i, short s, long l, float f, unsigned char uc, double d, unsigned short us, unsigned long ul, unsigned int ui)
408 {
409 call7b (i, s, l, f, uc, d, us, ul, ui, c);
410 }
411
412
413 /* Test printing of structures passed as arguments to recursive functions. */
414
415
416 typedef struct s
417 {
418 short s;
419 int i;
420 long l;
421 } SVAL;
422
hitbottom()423 void hitbottom ()
424 {
425 }
426
use_a(SVAL a)427 void use_a (SVAL a)
428 {
429 /* Trick the compiler into thinking A is important. */
430 volatile SVAL dummy = a;
431 }
432
recurse(SVAL a,int depth)433 void recurse (SVAL a, int depth)
434 {
435 a.s = a.i = a.l = --depth;
436 if (depth == 0)
437 hitbottom ();
438 else
439 recurse (a, depth);
440
441 /* Ensure A is not discarded after the above calls. */
442 use_a (a);
443 }
444
test_struct_args()445 void test_struct_args ()
446 {
447 SVAL s; s.s = 5; s.i = 5; s.l = 5;
448
449 recurse (s, 5);
450 }
451
452 /* On various machines (pa, 29k, and rs/6000, at least), a function which
453 calls alloca may do things differently with respect to frames. So give
454 it a try. */
455
localvars_after_alloca(char c,short s,int i,long l)456 void localvars_after_alloca (char c, short s, int i, long l)
457 {
458 #ifdef HAVE_STACK_ALLOCA
459 /* No need to use the alloca.c alloca-on-top-of-malloc; it doesn't
460 test what we are looking for, so if we don't have an alloca which
461 allocates on the stack, just don't bother to call alloca at all. */
462
463 char *z = alloca (s + 50);
464 #endif
465 c = 'a';
466 s = 5;
467 i = 6;
468 l = 7;
469 }
470
call_after_alloca_subr(char c,short s,int i,long l,unsigned char uc,unsigned short us,unsigned int ui,unsigned long ul)471 void call_after_alloca_subr (char c, short s, int i, long l, unsigned char uc, unsigned short us, unsigned int ui, unsigned long ul)
472 {
473 c = 'a';
474 i = 7; s = 8; l = 7; uc = 44; us = 77;
475 ul = 43; ui = 33;
476 }
477
call_after_alloca(char c,short s,int i,long l)478 void call_after_alloca (char c, short s, int i, long l)
479 {
480 #ifdef HAVE_STACK_ALLOCA
481 /* No need to use the alloca.c alloca-on-top-of-malloc; it doesn't
482 test what we are looking for, so if we don't have an alloca which
483 allocates on the stack, just don't bother to call alloca at all. */
484
485 char *z = alloca (s + 50);
486 #endif
487 call_after_alloca_subr (c, s, i, l, 'b', 11, 12, (unsigned long)13);
488 }
489
490
491
492 /* The point behind this test is the PA will call this indirectly
493 through dyncall. Unlike the indirect calls to call0a, this test
494 will require a trampoline between dyncall and this function on the
495 call path, then another trampoline on between this function and main
496 on the return path. */
call_with_trampolines(double d1)497 double call_with_trampolines (double d1)
498 {
499 return d1;
500 } /* End of call_with_trampolines, this comment is needed by funcargs.exp */
501
502 /* Dummy functions which the testsuite can use to run to, etc. */
503
504 void
marker_indirect_call()505 marker_indirect_call () {}
506
507 void
marker_call_with_trampolines()508 marker_call_with_trampolines () {}
509
main()510 int main ()
511 {
512 void (*pointer_to_call0a) (char, short, int, long) = (void (*)(char, short, int, long))call0a;
513 double (*pointer_to_call_with_trampolines) (double) = call_with_trampolines;
514
515 /* Test calling with basic integer types */
516 call0a (c, s, i, l);
517 call0b (s, i, l, c);
518 call0c (i, l, c, s);
519 call0d (l, c, s, i);
520 call0e (c, l, c, i, c, s, c, c);
521
522 /* Test calling with unsigned integer types */
523 call1a (uc, us, ui, ul);
524 call1b (us, ui, ul, uc);
525 call1c (ui, ul, uc, us);
526 call1d (ul, uc, us, ui);
527 call1e (uc, ul, uc, ui, uc, us, uc, uc);
528
529 /* Test calling with integral types mixed with floating point types */
530 call2a (c, f, s, d, i, f, l, d);
531 call2b (f, s, d, i, f, l, d, c);
532 call2c (s, d, i, f, l, d, c, f);
533 call2d (d, i, f, l, d, c, f, s);
534 call2e (i, f, l, d, c, f, s, d);
535 call2f (f, l, d, c, f, s, d, i);
536 call2g (l, d, c, f, s, d, i, f);
537 call2h (d, c, f, s, d, i, f, l);
538 call2i (c, f, c, c, d, c, c, c, f, s, c, d);
539
540 #ifdef TEST_COMPLEX
541 /* Test calling with _Complex types. */
542 callca (fc, fc, fc);
543 callcb (dc, dc, dc);
544 callcc (ldc, ldc, ldc);
545 callcd (fc, dc, ldc);
546 callce (dc, ldc, fc);
547 callcf (ldc, fc, dc);
548
549
550 callc1a (c, s, i, ui, l, fc, dc, ldc);
551 callc1b (ldc, c, s, i, fc, ui, l, dc);
552
553 callc2a (c, s, i, ui, l, f, d, fc, dc, ldc);
554 callc2b (fc, c, s, i, ui, ldc, l, f, d, dc);
555 #endif /* TEST_COMPLEX */
556
557 /* Test dereferencing pointers to various integral and floating types */
558
559 call3a (cp, sp, ip, lp);
560 call3b (ucp, usp, uip, ulp);
561 call3c (fp, dp);
562
563 /* Test dereferencing pointers to structs and unions */
564
565 call4a (stp);
566 un.u1 = 1;
567 call4b (unp);
568
569 /* Test calling with structures and unions. */
570
571 call5a (st);
572 un.u1 = 2;
573 call5b (un);
574
575 /* Test shuffling of args */
576
577 call6a (c, s, i, l, f, d, uc, us, ui, ul);
578 call7a (c, i, s, l, f, uc, d, us, ul, ui);
579
580 /* Test passing structures recursively. */
581
582 test_struct_args ();
583
584 localvars_after_alloca (c, s, i, l);
585
586 call_after_alloca (c, s, i, l);
587
588 /* This is for localvars_in_indirect_call. */
589 marker_indirect_call ();
590 /* The comment on the following two lines is used by funcargs.exp,
591 don't change it. */
592 (*pointer_to_call0a) (c, s, i, l); /* First step into call0a. */
593 (*pointer_to_call0a) (c, s, i, l); /* Second step into call0a. */
594 marker_call_with_trampolines ();
595 (*pointer_to_call_with_trampolines) (d); /* Test multiple trampolines. */
596 return 0;
597 }
598