Viewing file: struct10.c (1.01 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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 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); }
|