1/* Area: ffi_call 2 Purpose: Check return value double. 3 Limitations: none. 4 PR: none. 5 Originator: <andreast@gcc.gnu.org> 20050212 */ 6 7/* { dg-do run } */ 8#include "ffitest.h" 9 10static double return_dbl(double dbl) 11{ 12 printf ("%f\n", dbl); 13 return 2 * dbl; 14} 15int main (void) 16{ 17 ffi_cif cif; 18 ffi_type *args[MAX_ARGS]; 19 void *values[MAX_ARGS]; 20 double dbl, rdbl; 21 22 args[0] = &ffi_type_double; 23 values[0] = &dbl; 24 25 /* Initialize the cif */ 26 CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, 27 &ffi_type_double, args) == FFI_OK); 28 29 for (dbl = -127.3; dbl < 127; dbl++) 30 { 31 ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); 32 printf ("%f vs %f\n", rdbl, return_dbl(dbl)); 33 CHECK(rdbl == 2 * dbl); 34 } 35 exit(0); 36} 37