diff options
author | Andreas Tobler <andreast@gcc.gnu.org> | 2003-09-04 16:49:22 +0200 |
---|---|---|
committer | Andreas Tobler <andreast@gcc.gnu.org> | 2003-09-04 16:49:22 +0200 |
commit | 8a6b509ea857a07be12738d10403d3ab0f647ffe (patch) | |
tree | 864061fb5d14971ea20a6bca207ddced6dc8f374 /libffi/testsuite/libffi.call/cls_float.c | |
parent | bbf3057bf97696d4c5ba5c624c26ea0a9b1e04fa (diff) | |
download | gcc-8a6b509ea857a07be12738d10403d3ab0f647ffe.zip gcc-8a6b509ea857a07be12738d10403d3ab0f647ffe.tar.gz gcc-8a6b509ea857a07be12738d10403d3ab0f647ffe.tar.bz2 |
*** empty log message ***
From-SVN: r71069
Diffstat (limited to 'libffi/testsuite/libffi.call/cls_float.c')
-rw-r--r-- | libffi/testsuite/libffi.call/cls_float.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libffi/testsuite/libffi.call/cls_float.c b/libffi/testsuite/libffi.call/cls_float.c new file mode 100644 index 0000000..d20d78a --- /dev/null +++ b/libffi/testsuite/libffi.call/cls_float.c @@ -0,0 +1,43 @@ +/* Area: closure_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: <andreast@gcc.gnu.org> 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_float_fn(ffi_cif* cif,void* resp,void** args, + void* userdata) + { + *(float *)resp = *(float *)args[0]; + + printf("%g: %g\n",*(float *)args[0], + *(float *)resp); + } + +typedef float (*cls_ret_float)(float); + +int main (void) +{ + ffi_cif cif; + static ffi_closure cl; + ffi_closure *pcl = &cl; + ffi_type * cl_arg_types[2]; + + + cl_arg_types[0] = &ffi_type_float; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_float, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure(pcl, &cif, cls_ret_float_fn, NULL) == FFI_OK); + ((((cls_ret_float)pcl)(-2122.12))); + /* { dg-output "\\-2122.12: \\-2122.12\n" } */ + printf("%f \n",(((cls_ret_float)pcl)(-2122.12))); + /* { dg-output "\\-2122.12: \\-2122.12" } */ + /* { dg-output "\n\-2122.120117" } */ + exit(0); +} |