(root)/
gcc-13.2.0/
libffi/
testsuite/
libffi.call/
strlen3.c
       1  /* Area:	ffi_call
       2     Purpose:	Check strlen function call with additional arguments.
       3     Limitations:	none.
       4     PR:		none.
       5     Originator:	From the original ffitest.c  */
       6  
       7  /* { dg-do run } */
       8  
       9  #include "ffitest.h"
      10  
      11  static size_t ABI_ATTR my_f(float a, char *s)
      12  {
      13    return (size_t) ((int) strlen(s) + (int) a);
      14  }
      15  
      16  int main (void)
      17  {
      18    ffi_cif cif;
      19    ffi_type *args[MAX_ARGS];
      20    void *values[MAX_ARGS];
      21    ffi_arg rint;
      22    char *s;
      23    float v2;
      24    args[1] = &ffi_type_pointer;
      25    args[0] = &ffi_type_float;
      26    values[1] = (void*) &s;
      27    values[0] = (void*) &v2;
      28    
      29    /* Initialize the cif */
      30    CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
      31  		       &ffi_type_sint, args) == FFI_OK);
      32    
      33    s = "a";
      34    v2 = 0.0;
      35    ffi_call(&cif, FFI_FN(my_f), &rint, values);
      36    CHECK(rint == 1);
      37    
      38    s = "1234567";
      39    v2 = -1.0;
      40    ffi_call(&cif, FFI_FN(my_f), &rint, values);
      41    CHECK(rint == 6);
      42    
      43    s = "1234567890123456789012345";
      44    v2 = 1.0;
      45    ffi_call(&cif, FFI_FN(my_f), &rint, values);
      46    CHECK(rint == 26);
      47    
      48    exit(0);
      49  }