1 /* Area: closure_call 2 Purpose: Test anonymous unsigned short argument. 3 Limitations: none. 4 PR: none. 5 Originator: ARM Ltd. */ 6 7 /* { dg-do run } */ 8 #include "ffitest.h" 9 10 typedef unsigned short T; 11 12 static void cls_ret_T_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, 13 void* userdata __UNUSED__) 14 { 15 *(ffi_arg *)resp = *(T *)args[0]; 16 17 printf("%d: %d %d\n", (int)(*(ffi_arg *)resp), *(T *)args[0], *(T *)args[1]); 18 } 19 20 typedef T (*cls_ret_T)(T, ...); 21 22 int main (void) 23 { 24 ffi_cif cif; 25 void *code; 26 ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); 27 ffi_type * cl_arg_types[3]; 28 T res; 29 30 cl_arg_types[0] = &ffi_type_ushort; 31 cl_arg_types[1] = &ffi_type_ushort; 32 cl_arg_types[2] = NULL; 33 34 /* Initialize the cif */ 35 CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, 36 &ffi_type_ushort, cl_arg_types) == FFI_OK); 37 38 CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_T_fn, NULL, code) == FFI_OK); 39 res = ((((cls_ret_T)code)(67, 4))); 40 /* { dg-output "67: 67 4" } */ 41 printf("res: %d\n", res); 42 /* { dg-output "\nres: 67" } */ 43 exit(0); 44 } 45