2 Purpose: Test passing struct in variable argument lists.
5 Originator: ARM Ltd. */
8 /* { dg-output "" { xfail avr32*-*-* } } */
28 static struct small_tag
37 s1
= va_arg (ap
, struct small_tag
);
38 l
= va_arg (ap
, struct large_tag
);
39 s2
= va_arg (ap
, struct small_tag
);
40 printf ("%u %u %u %u %u %u %u %u %u\n", s1
.a
, s1
.b
, l
.a
, l
.b
, l
.c
, l
.d
, l
.e
,
53 ffi_type
* arg_types
[5];
56 ffi_type
*s_type_elements
[3];
59 ffi_type
*l_type_elements
[6];
70 s_type
.type
= FFI_TYPE_STRUCT
;
71 s_type
.elements
= s_type_elements
;
73 s_type_elements
[0] = &ffi_type_uchar
;
74 s_type_elements
[1] = &ffi_type_uchar
;
75 s_type_elements
[2] = NULL
;
79 l_type
.type
= FFI_TYPE_STRUCT
;
80 l_type
.elements
= l_type_elements
;
82 l_type_elements
[0] = &ffi_type_uint
;
83 l_type_elements
[1] = &ffi_type_uint
;
84 l_type_elements
[2] = &ffi_type_uint
;
85 l_type_elements
[3] = &ffi_type_uint
;
86 l_type_elements
[4] = &ffi_type_uint
;
87 l_type_elements
[5] = NULL
;
89 arg_types
[0] = &ffi_type_sint
;
90 arg_types
[1] = &s_type
;
91 arg_types
[2] = &l_type
;
92 arg_types
[3] = &s_type
;
95 CHECK(ffi_prep_cif_var(&cif
, FFI_DEFAULT_ABI
, 1, 4, &s_type
, arg_types
) == FFI_OK
);
117 ffi_call(&cif
, FFI_FN(test_fn
), &res
, args
);
118 /* { dg-output "5 6 10 11 12 13 14 7 8" } */
119 printf("res: %d %d\n", res
.a
, res
.b
);
120 /* { dg-output "\nres: 12 14" } */