Home | History | Annotate | Download | only in libffi.call
      1 /* Area:	closure_call
      2    Purpose:	Check return value schar.
      3    Limitations:	none.
      4    PR:		none.
      5    Originator:	<andreast (at) gcc.gnu.org> 20031108	 */
      6 
      7 
      8 
      9 /* { dg-do run } */
     10 #include "ffitest.h"
     11 
     12 static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
     13 			     void* userdata __UNUSED__)
     14 {
     15   *(ffi_arg*)resp = *(signed char *)args[0];
     16   printf("%d: %d\n",*(signed char *)args[0],
     17 	 (int)*(ffi_arg *)(resp));
     18 }
     19 typedef signed char (*cls_ret_schar)(signed char);
     20 
     21 int main (void)
     22 {
     23   ffi_cif cif;
     24   void *code;
     25   ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
     26   ffi_type * cl_arg_types[2];
     27   signed char res;
     28 
     29   cl_arg_types[0] = &ffi_type_schar;
     30   cl_arg_types[1] = NULL;
     31 
     32   /* Initialize the cif */
     33   CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
     34 		     &ffi_type_schar, cl_arg_types) == FFI_OK);
     35 
     36   CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_schar_fn, NULL, code)  == FFI_OK);
     37 
     38   res = (*((cls_ret_schar)code))(127);
     39   /* { dg-output "127: 127" } */
     40   printf("res: %d\n", res);
     41   /* { dg-output "\nres: 127" } */
     42 
     43   exit(0);
     44 }
     45