1 #include "compat-common.h"
2
3 #ifdef SKIP_VA
4 const int test_va = 0;
5 #else
6 const int test_va = 1;
7 #endif
8
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; \
14 \
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, ...); \
20 \
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; \
82 }
83
84 #include "small-struct-defs.h"
85 #include "small-struct-check.h"
86
87 T(Sc)
T(Ss)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)
102
103 #undef T
104
105 void
106 struct_return_3_x ()
107 {
108 DEBUG_INIT
109
110 #define T(TYPE) testit##TYPE ();
111
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)
127
128 DEBUG_FINI
129
130 if (fails != 0)
131 abort ();
132
133 #undef T
134 }
135