Edit

kc3-lang/libffi/testsuite/libffi.call/struct10.c

Branch :

  • Show log

    Commit

  • Author : Anthony Green
    Date : 2022-09-18 08:26:23
    Hash : b49308ea
    Message : Add missing ABI_ATTR

  • testsuite/libffi.call/struct10.c
  • /* Area:	ffi_call
       Purpose:	Check structures.
       Limitations:	none.
       PR:		none.
       Originator:	Sergei Trofimovich <slyfox@gentoo.org>
    
       The test originally discovered in ruby's bindings
       for ffi in https://bugs.gentoo.org/634190  */
    
    /* { dg-do run } */
    #include "ffitest.h"
    
    struct s {
      int s32;
      float f32;
      signed char s8;
    };
    
    struct s ABI_ATTR make_s(void) {
      struct s r;
      r.s32 = 0x1234;
      r.f32 = 7.0;
      r.s8  = 0x78;
      return r;
    }
    
    int main() {
      ffi_cif cif;
      struct s r;
      ffi_type rtype;
      ffi_type* s_fields[] = {
        &ffi_type_sint,
        &ffi_type_float,
        &ffi_type_schar,
        NULL,
      };
    
      rtype.size      = 0;
      rtype.alignment = 0,
      rtype.type      = FFI_TYPE_STRUCT,
      rtype.elements  = s_fields,
    
      r.s32 = 0xbad;
      r.f32 = 999.999;
      r.s8  = 0x51;
    
      // Here we emulate the following call:
      //r = make_s();
    
      CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &rtype, NULL) == FFI_OK);
      ffi_call(&cif, FFI_FN(make_s), &r, NULL);
    
      CHECK(r.s32 == 0x1234);
      CHECK(r.f32 == 7.0);
      CHECK(r.s8  == 0x78);
      exit(0);
    }