(root)/
gcc-13.2.0/
libffi/
testsuite/
libffi.call/
many2.c
       1  /* Area:        ffi_call
       2     Purpose:     Check uint8_t arguments.
       3     Limitations: none.
       4     PR:          PR45677.
       5     Originator:  Dan Witte <dwitte@gmail.com> 20100916  */
       6  
       7  /* { dg-do run } */
       8  
       9  #include "ffitest.h"
      10  
      11  #define NARGS 7
      12  
      13  typedef unsigned char u8;
      14  
      15  #ifdef __GNUC__
      16  __attribute__((noinline))
      17  #endif
      18  uint8_t
      19  foo (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
      20       uint8_t e, uint8_t f, uint8_t g)
      21  {
      22    return a + b + c + d + e + f + g;
      23  }
      24  
      25  uint8_t ABI_ATTR
      26  bar (uint8_t a, uint8_t b, uint8_t c, uint8_t d,
      27       uint8_t e, uint8_t f, uint8_t g)
      28  {
      29    return foo (a, b, c, d, e, f, g);
      30  }
      31  
      32  int
      33  main (void)
      34  {
      35    ffi_type *ffitypes[NARGS];
      36    int i;
      37    ffi_cif cif;
      38    ffi_arg result = 0;
      39    uint8_t args[NARGS];
      40    void *argptrs[NARGS];
      41  
      42    for (i = 0; i < NARGS; ++i)
      43      ffitypes[i] = &ffi_type_uint8;
      44  
      45    CHECK (ffi_prep_cif (&cif, ABI_NUM, NARGS,
      46  		       &ffi_type_uint8, ffitypes) == FFI_OK);
      47  
      48    for (i = 0; i < NARGS; ++i)
      49      {
      50        args[i] = i;
      51        argptrs[i] = &args[i];
      52      }
      53    ffi_call (&cif, FFI_FN (bar), &result, argptrs);
      54  
      55    CHECK (result == 21);
      56    return 0;
      57  }