diff options
author | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-07-25 20:01:22 +0000 |
---|---|---|
committer | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-07-25 20:01:22 +0000 |
commit | c695c02415c38d26c98d352e228cc348849819ac (patch) | |
tree | 75a10258420b179909b785eb7bb52eb01ba11601 /libffi/testsuite/libffi.call | |
parent | f68513d3a28b383ef34f7f65d90399436b9f57cd (diff) | |
download | gcc-c695c02415c38d26c98d352e228cc348849819ac.tar.gz |
2006-07-25 Torsten Schoenfeld <kaffeetisch@gmx.de>
* include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly
for 32-bit architectures.
* testsuite/libffi.call/return_ul.c: New test case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115739 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/testsuite/libffi.call')
-rw-r--r-- | libffi/testsuite/libffi.call/return_ul.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libffi/testsuite/libffi.call/return_ul.c b/libffi/testsuite/libffi.call/return_ul.c new file mode 100644 index 00000000000..25102240bc8 --- /dev/null +++ b/libffi/testsuite/libffi.call/return_ul.c @@ -0,0 +1,38 @@ +/* Area: ffi_call + Purpose: Check if unsigned long as return type is handled correctly. + Limitations: none. + PR: none. + Originator: <kaffeetisch at gmx dot de> 20060724 */ + +/* { dg-do run } */ +#include "ffitest.h" +static unsigned long return_ul(unsigned long ul1, unsigned long ul2) +{ + return ul1 + ul2; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + unsigned long res; + unsigned long ul1, ul2; + + args[0] = &ffi_type_ulong; + args[1] = &ffi_type_ulong; + values[0] = &ul1; + values[1] = &ul2; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_ulong, args) == FFI_OK); + + ul1 = 1073741823L; + ul2 = 1073741824L; + + ffi_call(&cif, FFI_FN(return_ul), &res, values); + printf("res: %ld, %ld\n", res, ul1 + ul2); + /* { dg-output "res: 2147483647, 2147483647" } */ + + exit(0); +} |