1  /* Area:	ffi_call
       2     Purpose:	Check if unsigned long as return type is handled correctly.
       3     Limitations:	none.
       4     PR:		none.
       5     Originator:	<kaffeetisch at gmx dot de> 20060724  */
       6  
       7  /* { dg-do run } */
       8  #include "ffitest.h"
       9  static unsigned long return_ul(unsigned long ul1, unsigned long ul2)
      10  {
      11    return ul1 + ul2;
      12  }
      13  
      14  int main (void)
      15  {
      16    ffi_cif cif;
      17    ffi_type *args[MAX_ARGS];
      18    void *values[MAX_ARGS];
      19    ffi_arg res;
      20    unsigned long ul1, ul2;
      21  
      22    args[0] = &ffi_type_ulong;
      23    args[1] = &ffi_type_ulong;
      24    values[0] = &ul1;
      25    values[1] = &ul2;
      26  
      27    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
      28  		     &ffi_type_ulong, args) == FFI_OK);
      29  
      30    ul1 = 1073741823L;
      31    ul2 = 1073741824L;
      32  
      33    ffi_call(&cif, FFI_FN(return_ul), &res, values);
      34    printf("res: %lu, %lu\n", (unsigned long)res, ul1 + ul2);
      35    /* { dg-output "res: 2147483647, 2147483647" } */
      36  
      37    exit(0);
      38  }