aboutsummaryrefslogtreecommitdiff
path: root/libffi
diff options
context:
space:
mode:
authordaney <>2007-08-24 18:32:02 +0000
committerdaney <>2007-08-24 18:32:02 +0000
commit3ee888dbc7852aec48bc7a92e96bcd04589252a9 (patch)
tree08cc79a48b9c18b217b87fd1c3d98bfd3142e580 /libffi
parentd4d93d3db0b6c6c5a750c53884b4d40145b9744b (diff)
* testsuite/libffi.call/return_sl.c: New test.
Diffstat (limited to 'libffi')
-rw-r--r--libffi/ChangeLog4
-rw-r--r--libffi/testsuite/libffi.call/return_sl.c38
2 files changed, 42 insertions, 0 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 671100b4188..00e17a91e0a 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,7 @@
+2007-08-24 David Daney <ddaney@avtrex.com>
+
+ * testsuite/libffi.call/return_sl.c: New test.
+
2007-08-10 David Daney <ddaney@avtrex.com>
* testsuite/libffi.call/cls_multi_ushort.c,
diff --git a/libffi/testsuite/libffi.call/return_sl.c b/libffi/testsuite/libffi.call/return_sl.c
new file mode 100644
index 00000000000..f0fd345f7a8
--- /dev/null
+++ b/libffi/testsuite/libffi.call/return_sl.c
@@ -0,0 +1,38 @@
+/* Area: ffi_call
+ Purpose: Check if long as return type is handled correctly.
+ Limitations: none.
+ PR: none.
+ */
+
+/* { dg-do run } */
+#include "ffitest.h"
+static long return_sl(long l1, long l2)
+{
+ return l1 - l2;
+}
+
+int main (void)
+{
+ ffi_cif cif;
+ ffi_type *args[MAX_ARGS];
+ void *values[MAX_ARGS];
+ ffi_arg res;
+ unsigned long l1, l2;
+
+ args[0] = &ffi_type_slong;
+ args[1] = &ffi_type_slong;
+ values[0] = &l1;
+ values[1] = &l2;
+
+ CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
+ &ffi_type_slong, args) == FFI_OK);
+
+ l1 = 1073741823L;
+ l2 = 1073741824L;
+
+ ffi_call(&cif, FFI_FN(return_sl), &res, values);
+ printf("res: %ld, %ld\n", (long)res, l1 - l2);
+ /* { dg-output "res: -1, -1" } */
+
+ exit(0);
+}