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