Merge to HEAD at tree-cleanup-merge-20041024 .
[official-gcc.git] / gcc / testsuite / gcc.dg / compat / struct-return-3_x.c
blobe985f91e444045061212643c9c53371659ca87e0
1 #include "compat-common.h"
3 #ifdef SKIP_VA
4 const int test_va = 0;
5 #else
6 const int test_va = 1;
7 #endif
9 #define T(TYPE) \
10 TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE; \
11 TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE; \
12 TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE; \
13 TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE; \
15 extern void init##TYPE (TYPE *p, int i); \
16 extern void checkg##TYPE (void); \
17 extern TYPE test0##TYPE (void); \
18 extern TYPE test1##TYPE (TYPE); \
19 extern TYPE testva##TYPE (int n, ...); \
21 void \
22 testit##TYPE (void) \
23 { \
24 TYPE rslt; \
25 DEBUG_FPUTS (#TYPE); \
26 DEBUG_FPUTS (" init: "); \
27 init##TYPE (&g01##TYPE, 1); \
28 init##TYPE (&g02##TYPE, 2); \
29 init##TYPE (&g03##TYPE, 3); \
30 init##TYPE (&g04##TYPE, 4); \
31 init##TYPE (&g05##TYPE, 5); \
32 init##TYPE (&g06##TYPE, 6); \
33 init##TYPE (&g07##TYPE, 7); \
34 init##TYPE (&g08##TYPE, 8); \
35 init##TYPE (&g09##TYPE, 9); \
36 init##TYPE (&g10##TYPE, 10); \
37 init##TYPE (&g11##TYPE, 11); \
38 init##TYPE (&g12##TYPE, 12); \
39 init##TYPE (&g13##TYPE, 13); \
40 init##TYPE (&g14##TYPE, 14); \
41 init##TYPE (&g15##TYPE, 15); \
42 init##TYPE (&g16##TYPE, 16); \
43 checkg##TYPE (); \
44 DEBUG_NL; \
45 DEBUG_FPUTS (#TYPE); \
46 DEBUG_FPUTS (" test0: "); \
47 rslt = test0##TYPE (); \
48 check##TYPE (rslt, 1); \
49 DEBUG_NL; \
50 DEBUG_FPUTS (#TYPE); \
51 DEBUG_FPUTS (" test1: "); \
52 rslt = test1##TYPE (g01##TYPE); \
53 check##TYPE (rslt, 1); \
54 if (test_va) \
55 { \
56 DEBUG_NL; \
57 DEBUG_FPUTS (#TYPE); \
58 DEBUG_FPUTS (" testva: "); \
59 rslt = testva##TYPE (1, g01##TYPE); \
60 check##TYPE (rslt, 1); \
61 rslt = testva##TYPE (5, g01##TYPE, g02##TYPE, \
62 g03##TYPE, g04##TYPE, \
63 g05##TYPE); \
64 check##TYPE (rslt, 5); \
65 rslt = testva##TYPE (9, g01##TYPE, g02##TYPE, \
66 g03##TYPE, g04##TYPE, \
67 g05##TYPE, g06##TYPE, \
68 g07##TYPE, g08##TYPE, \
69 g09##TYPE); \
70 check##TYPE (rslt, 9); \
71 rslt = testva##TYPE (16, g01##TYPE, g02##TYPE, \
72 g03##TYPE, g04##TYPE, \
73 g05##TYPE, g06##TYPE, \
74 g07##TYPE, g08##TYPE, \
75 g09##TYPE, g10##TYPE, \
76 g11##TYPE, g12##TYPE, \
77 g13##TYPE, g14##TYPE, \
78 g15##TYPE, g16##TYPE); \
79 check##TYPE (rslt, 16); \
80 } \
81 DEBUG_NL; \
84 #include "small-struct-defs.h"
85 #include "small-struct-check.h"
87 T(Sc)
88 T(Ss)
89 T(Si)
90 T(Scs)
91 T(Ssc)
92 T(Sic)
93 T(Sci)
94 T(Ssi)
95 T(Sis)
96 T(Scsi)
97 T(Scis)
98 T(Ssci)
99 T(Ssic)
100 T(Sisc)
101 T(Sics)
103 #undef T
105 void
106 struct_return_3_x ()
108 DEBUG_INIT
110 #define T(TYPE) testit##TYPE ();
112 T(Sc)
113 T(Ss)
114 T(Si)
115 T(Scs)
116 T(Ssc)
117 T(Sic)
118 T(Sci)
119 T(Ssi)
120 T(Sis)
121 T(Scsi)
122 T(Scis)
123 T(Ssci)
124 T(Ssic)
125 T(Sisc)
126 T(Sics)
128 DEBUG_FINI
130 if (fails != 0)
131 abort ();
133 #undef T