1 /*	Area:			ffi_call, closure_call
2 	Purpose:		Check large structure returns.
3 	Limitations:	none.
4 	PR:				none.
5 	Originator:		Blake Chaffin	6/18/2007
6 */
7 
8 /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
9 /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
10 /* { dg-options -Wformat=0 { target moxie*-*-elf } } */
11 
12 #include "ffitest.h"
13 
14 typedef	struct BigStruct{
15 	uint8_t		a;
16 	int8_t		b;
17 	uint16_t	c;
18 	int16_t		d;
19 	uint32_t	e;
20 	int32_t		f;
21 	uint64_t	g;
22 	int64_t		h;
23 	float		i;
24 	double		j;
25 	long double	k;
26 	char*		l;
27 	uint8_t		m;
28 	int8_t		n;
29 	uint16_t	o;
30 	int16_t		p;
31 	uint32_t	q;
32 	int32_t		r;
33 	uint64_t	s;
34 	int64_t		t;
35 	float		u;
36 	double		v;
37 	long double	w;
38 	char*		x;
39 	uint8_t		y;
40 	int8_t		z;
41 	uint16_t	aa;
42 	int16_t		bb;
43 	uint32_t	cc;
44 	int32_t		dd;
45 	uint64_t	ee;
46 	int64_t		ff;
47 	float		gg;
48 	double		hh;
49 	long double	ii;
50 	char*		jj;
51 	uint8_t		kk;
52 	int8_t		ll;
53 	uint16_t	mm;
54 	int16_t		nn;
55 	uint32_t	oo;
56 	int32_t		pp;
57 	uint64_t	qq;
58 	int64_t		rr;
59 	float		ss;
60 	double		tt;
61 	long double	uu;
62 	char*		vv;
63 	uint8_t		ww;
64 	int8_t		xx;
65 } BigStruct;
66 
67 BigStruct
test_large_fn(uint8_t ui8_1,int8_t si8_1,uint16_t ui16_1,int16_t si16_1,uint32_t ui32_1,int32_t si32_1,uint64_t ui64_1,int64_t si64_1,float f_1,double d_1,long double ld_1,char * p_1,uint8_t ui8_2,int8_t si8_2,uint16_t ui16_2,int16_t si16_2,uint32_t ui32_2,int32_t si32_2,uint64_t ui64_2,int64_t si64_2,float f_2,double d_2,long double ld_2,char * p_2,uint8_t ui8_3,int8_t si8_3,uint16_t ui16_3,int16_t si16_3,uint32_t ui32_3,int32_t si32_3,uint64_t ui64_3,int64_t si64_3,float f_3,double d_3,long double ld_3,char * p_3,uint8_t ui8_4,int8_t si8_4,uint16_t ui16_4,int16_t si16_4,uint32_t ui32_4,int32_t si32_4,uint64_t ui64_4,int64_t si64_4,float f_4,double d_4,long double ld_4,char * p_4,uint8_t ui8_5,int8_t si8_5)68 test_large_fn(
69 	uint8_t		ui8_1,
70 	int8_t		si8_1,
71 	uint16_t	ui16_1,
72 	int16_t		si16_1,
73 	uint32_t	ui32_1,
74 	int32_t		si32_1,
75 	uint64_t	ui64_1,
76 	int64_t		si64_1,
77 	float		f_1,
78 	double		d_1,
79 	long double	ld_1,
80 	char*		p_1,
81 	uint8_t		ui8_2,
82 	int8_t		si8_2,
83 	uint16_t	ui16_2,
84 	int16_t		si16_2,
85 	uint32_t	ui32_2,
86 	int32_t		si32_2,
87 	uint64_t	ui64_2,
88 	int64_t		si64_2,
89 	float		f_2,
90 	double		d_2,
91 	long double	ld_2,
92 	char*		p_2,
93 	uint8_t		ui8_3,
94 	int8_t		si8_3,
95 	uint16_t	ui16_3,
96 	int16_t		si16_3,
97 	uint32_t	ui32_3,
98 	int32_t		si32_3,
99 	uint64_t	ui64_3,
100 	int64_t		si64_3,
101 	float		f_3,
102 	double		d_3,
103 	long double	ld_3,
104 	char*		p_3,
105 	uint8_t		ui8_4,
106 	int8_t		si8_4,
107 	uint16_t	ui16_4,
108 	int16_t		si16_4,
109 	uint32_t	ui32_4,
110 	int32_t		si32_4,
111 	uint64_t	ui64_4,
112 	int64_t		si64_4,
113 	float		f_4,
114 	double		d_4,
115 	long double	ld_4,
116 	char*		p_4,
117 	uint8_t		ui8_5,
118 	int8_t		si8_5)
119 {
120 	BigStruct	retVal	= {
121 		ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1, ui32_1 + 1, si32_1 + 1,
122 			ui64_1 + 1, si64_1 + 1, f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1),
123 		ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2,
124 			ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2),
125 		ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3,
126 			ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3),
127 		ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4,
128 			ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4),
129 		ui8_5 + 5, si8_5 + 5};
130 
131 	printf("%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
132 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
133 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
134 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 ": "
135 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
136 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
137 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
138 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
139 	       ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1,
140 		ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2,
141 		ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3,
142 		ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5,
143 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
144 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
145 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
146 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
147 		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
148 	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
149 		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
150 	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
151 
152 	return	retVal;
153 }
154 
155 static void
cls_large_fn(ffi_cif * cif __UNUSED__,void * resp,void ** args,void * userdata __UNUSED__)156 cls_large_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__)
157 {
158 	uint8_t		ui8_1	= *(uint8_t*)args[0];
159 	int8_t		si8_1	= *(int8_t*)args[1];
160 	uint16_t	ui16_1	= *(uint16_t*)args[2];
161 	int16_t		si16_1	= *(int16_t*)args[3];
162 	uint32_t	ui32_1	= *(uint32_t*)args[4];
163 	int32_t		si32_1	= *(int32_t*)args[5];
164 	uint64_t	ui64_1	= *(uint64_t*)args[6];
165 	int64_t		si64_1	= *(int64_t*)args[7];
166 	float		f_1		= *(float*)args[8];
167 	double		d_1		= *(double*)args[9];
168 	long double	ld_1	= *(long double*)args[10];
169 	char*		p_1		= *(char**)args[11];
170 	uint8_t		ui8_2	= *(uint8_t*)args[12];
171 	int8_t		si8_2	= *(int8_t*)args[13];
172 	uint16_t	ui16_2	= *(uint16_t*)args[14];
173 	int16_t		si16_2	= *(int16_t*)args[15];
174 	uint32_t	ui32_2	= *(uint32_t*)args[16];
175 	int32_t		si32_2	= *(int32_t*)args[17];
176 	uint64_t	ui64_2	= *(uint64_t*)args[18];
177 	int64_t		si64_2	= *(int64_t*)args[19];
178 	float		f_2		= *(float*)args[20];
179 	double		d_2		= *(double*)args[21];
180 	long double	ld_2	= *(long double*)args[22];
181 	char*		p_2		= *(char**)args[23];
182 	uint8_t		ui8_3	= *(uint8_t*)args[24];
183 	int8_t		si8_3	= *(int8_t*)args[25];
184 	uint16_t	ui16_3	= *(uint16_t*)args[26];
185 	int16_t		si16_3	= *(int16_t*)args[27];
186 	uint32_t	ui32_3	= *(uint32_t*)args[28];
187 	int32_t		si32_3	= *(int32_t*)args[29];
188 	uint64_t	ui64_3	= *(uint64_t*)args[30];
189 	int64_t		si64_3	= *(int64_t*)args[31];
190 	float		f_3		= *(float*)args[32];
191 	double		d_3		= *(double*)args[33];
192 	long double	ld_3	= *(long double*)args[34];
193 	char*		p_3		= *(char**)args[35];
194 	uint8_t		ui8_4	= *(uint8_t*)args[36];
195 	int8_t		si8_4	= *(int8_t*)args[37];
196 	uint16_t	ui16_4	= *(uint16_t*)args[38];
197 	int16_t		si16_4	= *(int16_t*)args[39];
198 	uint32_t	ui32_4	= *(uint32_t*)args[40];
199 	int32_t		si32_4	= *(int32_t*)args[41];
200 	uint64_t	ui64_4	= *(uint64_t*)args[42];
201 	int64_t		si64_4	= *(int64_t*)args[43];
202 	float		f_4		= *(float*)args[44];
203 	double		d_4		= *(double*)args[45];
204 	long double	ld_4	= *(long double*)args[46];
205 	char*		p_4		= *(char**)args[47];
206 	uint8_t		ui8_5	= *(uint8_t*)args[48];
207 	int8_t		si8_5	= *(int8_t*)args[49];
208 
209 	*(BigStruct*)resp = test_large_fn(
210 		ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, p_1,
211 		ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, p_2,
212 		ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, p_3,
213 		ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, p_4,
214 		ui8_5, si8_5);
215 }
216 
217 int
main(int argc __UNUSED__,const char ** argv __UNUSED__)218 main(int argc __UNUSED__, const char** argv __UNUSED__)
219 {
220         void *code;
221 	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
222 
223 	ffi_cif		cif;
224 	ffi_type*	argTypes[51];
225 	void*		argValues[51];
226 
227 	ffi_type	ret_struct_type;
228 	ffi_type*	st_fields[51];
229 	BigStruct	retVal;
230 
231 	uint8_t		ui8		= 1;
232 	int8_t		si8		= 2;
233 	uint16_t	ui16	= 3;
234 	int16_t		si16	= 4;
235 	uint32_t	ui32	= 5;
236 	int32_t		si32	= 6;
237 	uint64_t	ui64	= 7;
238 	int64_t		si64	= 8;
239 	float		f		= 9;
240 	double		d		= 10;
241 	long double	ld		= 11;
242 	char*		p		= (char*)0x12345678;
243 
244 	memset (&retVal, 0, sizeof(retVal));
245 
246 	ret_struct_type.size = 0;
247 	ret_struct_type.alignment = 0;
248 	ret_struct_type.type = FFI_TYPE_STRUCT;
249 	ret_struct_type.elements = st_fields;
250 
251 	st_fields[0]	= st_fields[12]	= st_fields[24]	= st_fields[36]	= st_fields[48]	= &ffi_type_uint8;
252 	st_fields[1]	= st_fields[13]	= st_fields[25]	= st_fields[37]	= st_fields[49]	= &ffi_type_sint8;
253 	st_fields[2]	= st_fields[14]	= st_fields[26]	= st_fields[38]	= &ffi_type_uint16;
254 	st_fields[3]	= st_fields[15]	= st_fields[27]	= st_fields[39]	= &ffi_type_sint16;
255 	st_fields[4]	= st_fields[16]	= st_fields[28]	= st_fields[40]	= &ffi_type_uint32;
256 	st_fields[5]	= st_fields[17]	= st_fields[29]	= st_fields[41]	= &ffi_type_sint32;
257 	st_fields[6]	= st_fields[18]	= st_fields[30]	= st_fields[42]	= &ffi_type_uint64;
258 	st_fields[7]	= st_fields[19]	= st_fields[31]	= st_fields[43]	= &ffi_type_sint64;
259 	st_fields[8]	= st_fields[20]	= st_fields[32]	= st_fields[44]	= &ffi_type_float;
260 	st_fields[9]	= st_fields[21]	= st_fields[33]	= st_fields[45]	= &ffi_type_double;
261 	st_fields[10]	= st_fields[22]	= st_fields[34]	= st_fields[46]	= &ffi_type_longdouble;
262 	st_fields[11]	= st_fields[23]	= st_fields[35]	= st_fields[47]	= &ffi_type_pointer;
263 
264 	st_fields[50] = NULL;
265 
266 	argTypes[0]		= argTypes[12]	= argTypes[24]	= argTypes[36]	= argTypes[48]	= &ffi_type_uint8;
267 	argValues[0]	= argValues[12]	= argValues[24]	= argValues[36]	= argValues[48]	= &ui8;
268 	argTypes[1]		= argTypes[13]	= argTypes[25]	= argTypes[37]	= argTypes[49]	= &ffi_type_sint8;
269 	argValues[1]	= argValues[13]	= argValues[25]	= argValues[37]	= argValues[49]	= &si8;
270 	argTypes[2]		= argTypes[14]	= argTypes[26]	= argTypes[38]	= &ffi_type_uint16;
271 	argValues[2]	= argValues[14]	= argValues[26]	= argValues[38]	= &ui16;
272 	argTypes[3]		= argTypes[15]	= argTypes[27]	= argTypes[39]	= &ffi_type_sint16;
273 	argValues[3]	= argValues[15]	= argValues[27]	= argValues[39]	= &si16;
274 	argTypes[4]		= argTypes[16]	= argTypes[28]	= argTypes[40]	= &ffi_type_uint32;
275 	argValues[4]	= argValues[16]	= argValues[28]	= argValues[40]	= &ui32;
276 	argTypes[5]		= argTypes[17]	= argTypes[29]	= argTypes[41]	= &ffi_type_sint32;
277 	argValues[5]	= argValues[17]	= argValues[29]	= argValues[41]	= &si32;
278 	argTypes[6]		= argTypes[18]	= argTypes[30]	= argTypes[42]	= &ffi_type_uint64;
279 	argValues[6]	= argValues[18]	= argValues[30]	= argValues[42]	= &ui64;
280 	argTypes[7]		= argTypes[19]	= argTypes[31]	= argTypes[43]	= &ffi_type_sint64;
281 	argValues[7]	= argValues[19]	= argValues[31]	= argValues[43]	= &si64;
282 	argTypes[8]		= argTypes[20]	= argTypes[32]	= argTypes[44]	= &ffi_type_float;
283 	argValues[8]	= argValues[20]	= argValues[32]	= argValues[44]	= &f;
284 	argTypes[9]		= argTypes[21]	= argTypes[33]	= argTypes[45]	= &ffi_type_double;
285 	argValues[9]	= argValues[21]	= argValues[33]	= argValues[45]	= &d;
286 	argTypes[10]	= argTypes[22]	= argTypes[34]	= argTypes[46]	= &ffi_type_longdouble;
287 	argValues[10]	= argValues[22]	= argValues[34]	= argValues[46]	= &ld;
288 	argTypes[11]	= argTypes[23]	= argTypes[35]	= argTypes[47]	= &ffi_type_pointer;
289 	argValues[11]	= argValues[23]	= argValues[35]	= argValues[47]	= &p;
290 
291 	argTypes[50]	= NULL;
292 	argValues[50]	= NULL;
293 
294 	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
295 
296 	ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
297 	/* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
298 	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
299 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
300 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
301 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
302 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
303 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
304 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
305 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
306 		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
307 	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
308 		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
309 	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
310 	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
311 
312 	CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
313 
314 	retVal	= ((BigStruct(*)(
315 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
316 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
317 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
318 		uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
319 		uint8_t, int8_t))(code))(
320 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
321 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
322 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
323 		ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
324 		ui8, si8);
325 	/* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
326 	printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
327 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
328 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
329 		"%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
330 		retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
331 	       retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
332 		retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
333 	       retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
334 		retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
335 	       retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
336 		retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
337 	       retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
338 	/* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
339 
340     return 0;
341 }
342