1 #include "compat-common.h"
2
3 #define T(N, TYPE) \
4 struct S##TYPE##N { TYPE i[N]; }; \
5 \
6 struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \
7 struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \
8 struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \
9 struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \
10 struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \
11 struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \
12 struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \
13 struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \
14 \
15 extern void init##TYPE (TYPE *p, int i); \
16 extern void checkg##TYPE##N (void); \
17 extern void \
18 test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
19 struct S##TYPE##N s3, struct S##TYPE##N s4, \
20 struct S##TYPE##N s5, struct S##TYPE##N s6, \
21 struct S##TYPE##N s7, struct S##TYPE##N s8, \
22 struct S##TYPE##N s9, struct S##TYPE##N s10, \
23 struct S##TYPE##N s11, struct S##TYPE##N s12, \
24 struct S##TYPE##N s13, struct S##TYPE##N s14, \
25 struct S##TYPE##N s15, struct S##TYPE##N s16); \
26 extern void testva##TYPE##N (int n, ...); \
27 \
28 \
29 void \
30 init##TYPE##N (struct S##TYPE##N *p, int i) \
31 { \
32 int j; \
33 for (j = 0; j < N; j++) \
34 init##TYPE(&p->i[j], i+j); \
35 } \
36 \
37 void \
38 check##TYPE##N (struct S##TYPE##N *p, int i) \
39 { \
40 int j; \
41 for (j = 0; j < N; j++) \
42 check##TYPE(p->i[j], i+j); \
43 } \
44 \
45 void \
46 test2_##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
47 struct S##TYPE##N s3, struct S##TYPE##N s4, \
48 struct S##TYPE##N s5, struct S##TYPE##N s6, \
49 struct S##TYPE##N s7, struct S##TYPE##N s8) \
50 { \
51 test##TYPE##N (s1, g2s##TYPE##N, s2, g4s##TYPE##N, \
52 s3, g6s##TYPE##N, s4, g8s##TYPE##N, \
53 s5, g10s##TYPE##N, s6, g12s##TYPE##N, \
54 s7, g14s##TYPE##N, s8, g16s##TYPE##N); \
55 } \
56 \
57 void \
58 testit##TYPE##N (void) \
59 { \
60 DEBUG_FPUTS (#TYPE "[" #N "]"); \
61 DEBUG_FPUTS (" init: "); \
62 init##TYPE##N ( &g1s##TYPE##N, 1*16); \
63 init##TYPE##N ( &g2s##TYPE##N, 2*16); \
64 init##TYPE##N ( &g3s##TYPE##N, 3*16); \
65 init##TYPE##N ( &g4s##TYPE##N, 4*16); \
66 init##TYPE##N ( &g5s##TYPE##N, 5*16); \
67 init##TYPE##N ( &g6s##TYPE##N, 6*16); \
68 init##TYPE##N ( &g7s##TYPE##N, 7*16); \
69 init##TYPE##N ( &g8s##TYPE##N, 8*16); \
70 init##TYPE##N ( &g9s##TYPE##N, 9*16); \
71 init##TYPE##N (&g10s##TYPE##N, 10*16); \
72 init##TYPE##N (&g11s##TYPE##N, 11*16); \
73 init##TYPE##N (&g12s##TYPE##N, 12*16); \
74 init##TYPE##N (&g13s##TYPE##N, 13*16); \
75 init##TYPE##N (&g14s##TYPE##N, 14*16); \
76 init##TYPE##N (&g15s##TYPE##N, 15*16); \
77 init##TYPE##N (&g16s##TYPE##N, 16*16); \
78 checkg##TYPE##N (); \
79 DEBUG_NL; \
80 DEBUG_FPUTS (#TYPE "[" #N "]"); \
81 DEBUG_FPUTS (" test: "); \
82 test##TYPE##N (g1s##TYPE##N, g2s##TYPE##N, \
83 g3s##TYPE##N, g4s##TYPE##N, \
84 g5s##TYPE##N, g6s##TYPE##N, \
85 g7s##TYPE##N, g8s##TYPE##N, \
86 g9s##TYPE##N, g10s##TYPE##N, \
87 g11s##TYPE##N, g12s##TYPE##N, \
88 g13s##TYPE##N, g14s##TYPE##N, \
89 g15s##TYPE##N, g16s##TYPE##N); \
90 DEBUG_NL; \
91 DEBUG_FPUTS (#TYPE "[" #N "]"); \
92 DEBUG_FPUTS (" testva:"); \
93 DEBUG_NL; \
94 testva##TYPE##N (16, \
95 g1s##TYPE##N, g2s##TYPE##N, \
96 g3s##TYPE##N, g4s##TYPE##N, \
97 g5s##TYPE##N, g6s##TYPE##N, \
98 g7s##TYPE##N, g8s##TYPE##N, \
99 g9s##TYPE##N, g10s##TYPE##N, \
100 g11s##TYPE##N, g12s##TYPE##N, \
101 g13s##TYPE##N, g14s##TYPE##N, \
102 g15s##TYPE##N, g16s##TYPE##N); \
103 DEBUG_NL; \
104 DEBUG_FPUTS (#TYPE "[" #N "]"); \
105 DEBUG_FPUTS (" test2: "); \
106 test2_##TYPE##N (g1s##TYPE##N, g3s##TYPE##N, \
107 g5s##TYPE##N, g7s##TYPE##N, \
108 g9s##TYPE##N, g11s##TYPE##N, \
109 g13s##TYPE##N, g15s##TYPE##N); \
110 DEBUG_NL; \
111 }
112
113 typedef struct { char c; } Sc;
114 typedef struct { short s; } Ss;
115 typedef struct { int i; } Si;
116 typedef struct { short s; char c; } Ssc;
117 typedef struct { int i; short s; } Sis;
118 typedef struct { char c; short s; int i; } Scsi;
119 typedef struct { char c; int i; short s; } Scis;
120
121 extern void abort (void);
122
checkSc(Sc x,int i)123 void checkSc (Sc x, int i) { if (x.c != i/16) DEBUG_CHECK }
checkSs(Ss x,int i)124 void checkSs (Ss x, int i) { if (x.s != i) DEBUG_CHECK }
checkSi(Si x,int i)125 void checkSi (Si x, int i) { if (x.i != i) DEBUG_CHECK }
checkSsc(Ssc x,int i)126 void checkSsc (Ssc x, int i)
127 { if (x.s != i || x.c != (i/16)+1) DEBUG_CHECK }
checkSis(Sis x,int i)128 void checkSis (Sis x, int i)
129 { if (x.i != i || x.s != i+1) DEBUG_CHECK }
checkScsi(Scsi x,int i)130 void checkScsi (Scsi x, int i)
131 { if (x.c != i/16 || x.s != i+1 || x.i != i+2) DEBUG_CHECK }
checkScis(Scis x,int i)132 void checkScis (Scis x, int i)
133 { if (x.c != i/16 || x.i != i+1 || x.s != i+2) DEBUG_CHECK }
134
135 #ifndef SKIP_ZERO_ARRAY
136 T(0, Scsi)
137 #endif
138 T(1, Scsi)
139 T(2, Scsi)
140 T(3, Scsi)
141 T(4, Scsi)
142 T(5, Scsi)
143 T(6, Scsi)
144 T(7, Scsi)
145 T(8, Scsi)
146 T(9, Scsi)
147 T(10, Scsi)
148 T(11, Scsi)
149 T(12, Scsi)
150 T(13, Scsi)
151 T(14, Scsi)
152 T(15, Scsi)
153 #ifndef SKIP_ZERO_ARRAY
154 T(0, Scis)
155 #endif
156 T(1, Scis)
157 T(2, Scis)
158 T(3, Scis)
159 T(4, Scis)
160 T(5, Scis)
161 T(6, Scis)
162 T(7, Scis)
163 T(8, Scis)
164 T(9, Scis)
165 T(10, Scis)
166 T(11, Scis)
167 T(12, Scis)
168 T(13, Scis)
169 T(14, Scis)
170 T(15, Scis)
171
172 #undef T
173
174 void
struct_by_value_9_x()175 struct_by_value_9_x ()
176 {
177 DEBUG_INIT
178
179 #define T(N, TYPE) testit##TYPE##N ();
180
181 #ifndef SKIP_ZERO_ARRAY
182 T(0, Scsi)
183 #endif
184 T(1, Scsi)
185 T(2, Scsi)
186 T(3, Scsi)
187 T(4, Scsi)
188 T(5, Scsi)
189 T(6, Scsi)
190 T(7, Scsi)
191 T(8, Scsi)
192 T(9, Scsi)
193 T(10, Scsi)
194 T(11, Scsi)
195 T(12, Scsi)
196 T(13, Scsi)
197 T(14, Scsi)
198 T(15, Scsi)
199 #ifndef SKIP_ZERO_ARRAY
200 T(0, Scis)
201 #endif
202 T(1, Scis)
203 T(2, Scis)
204 T(3, Scis)
205 T(4, Scis)
206 T(5, Scis)
207 T(6, Scis)
208 T(7, Scis)
209 T(8, Scis)
210 T(9, Scis)
211 T(10, Scis)
212 T(11, Scis)
213 T(12, Scis)
214 T(13, Scis)
215 T(14, Scis)
216 T(15, Scis)
217
218 DEBUG_FINI
219
220 if (fails != 0)
221 abort ();
222
223 #undef T
224 }
225