summaryrefslogtreecommitdiff
path: root/libffi/testsuite/libffi.call
diff options
context:
space:
mode:
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-25 20:01:22 +0000
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-25 20:01:22 +0000
commitc695c02415c38d26c98d352e228cc348849819ac (patch)
tree75a10258420b179909b785eb7bb52eb01ba11601 /libffi/testsuite/libffi.call
parentf68513d3a28b383ef34f7f65d90399436b9f57cd (diff)
downloadgcc-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.c38
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);
+}