1  /* Area:	ffi_call
       2     Purpose:	Check for proper argument alignment.
       3     Limitations:	none.
       4     PR:		none.
       5     Originator:	<twalljava@java.net> (from many_win32.c) */
       6  
       7  /* { dg-do run } */
       8  
       9  #include "ffitest.h"
      10  
      11  static float ABI_ATTR align_arguments(int i1,
      12                                        double f2,
      13                                        int i3,
      14                                        double f4)
      15  {
      16    return i1+f2+i3+f4;
      17  }
      18  
      19  int main(void)
      20  {
      21    ffi_cif cif;
      22    ffi_type *args[4] = {
      23      &ffi_type_sint,
      24      &ffi_type_double,
      25      &ffi_type_sint,
      26      &ffi_type_double
      27    };
      28    double fa[2] = {1,2};
      29    int ia[2] = {1,2};
      30    void *values[4] = {&ia[0], &fa[0], &ia[1], &fa[1]};
      31    float f, ff;
      32  
      33    /* Initialize the cif */
      34    CHECK(ffi_prep_cif(&cif, ABI_NUM, 4,
      35  		     &ffi_type_float, args) == FFI_OK);
      36  
      37    ff = align_arguments(ia[0], fa[0], ia[1], fa[1]);
      38  
      39    ffi_call(&cif, FFI_FN(align_arguments), &f, values);
      40  
      41    if (f == ff)
      42      printf("align arguments tests ok!\n");
      43    else
      44      CHECK(0);
      45    exit(0);
      46  }