1 /* Area: ffi_call 2 Purpose: Check that negative integers are passed correctly. 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 int checking(int a, short b, signed char c) 12 { 13 14 return (a < 0 && b < 0 && c < 0); 15 } 16 17 int main (void) 18 { 19 ffi_cif cif; 20 ffi_type *args[MAX_ARGS]; 21 void *values[MAX_ARGS]; 22 ffi_arg rint; 23 24 signed int si; 25 signed short ss; 26 signed char sc; 27 28 args[0] = &ffi_type_sint; 29 values[0] = &si; 30 args[1] = &ffi_type_sshort; 31 values[1] = &ss; 32 args[2] = &ffi_type_schar; 33 values[2] = ≻ 34 35 /* Initialize the cif */ 36 CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, 37 &ffi_type_sint, args) == FFI_OK); 38 39 si = -6; 40 ss = -12; 41 sc = -1; 42 43 checking (si, ss, sc); 44 45 ffi_call(&cif, FFI_FN(checking), &rint, values); 46 47 printf ("%d vs %d\n", (int)rint, checking (si, ss, sc)); 48 49 CHECK(rint != 0); 50 51 exit (0); 52 } 53