* testsuite/libffi.call/negint.c: New test case.
authorKaz Kojima <kkojima@gcc.gnu.org>
Sat, 2 Oct 2004 07:02:41 +0000 (07:02 +0000)
committerKaz Kojima <kkojima@gcc.gnu.org>
Sat, 2 Oct 2004 07:02:41 +0000 (07:02 +0000)
From-SVN: r88421

libffi/ChangeLog
libffi/testsuite/libffi.call/negint.c [new file with mode: 0644]

index a172ea187e4ed9a166dd83cf988b5a56b30243f7..40e9396466851227f5104d8c9e2d1a371f306602 100644 (file)
@@ -1,3 +1,7 @@
+2004-10-02  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * testsuite/libffi.call/negint.c: New test case.
+
 2004-09-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR libgcj/17465
diff --git a/libffi/testsuite/libffi.call/negint.c b/libffi/testsuite/libffi.call/negint.c
new file mode 100644 (file)
index 0000000..1c8ed61
--- /dev/null
@@ -0,0 +1,54 @@
+/* Area:       ffi_call
+   Purpose:    Check that negative integers are passed correctly.
+   Limitations:        none.
+   PR:         none.
+   Originator: From the original ffitest.c  */
+
+/* { dg-do run } */
+/* { dg-options -O2 } */
+
+#include "ffitest.h"
+
+static int checking(int a, short b, signed char c)
+{
+  int i;
+
+  return (a < 0 && b < 0 && c < 0);
+}
+
+int main (void)
+{
+  ffi_cif cif;
+  ffi_type *args[MAX_ARGS];
+  void *values[MAX_ARGS];
+  ffi_arg rint;
+
+  signed int si;
+  signed short ss;
+  signed char sc;
+
+  args[0] = &ffi_type_sint;
+  values[0] = &si;
+  args[1] = &ffi_type_sshort;
+  values[1] = &ss;
+  args[2] = &ffi_type_schar;
+  values[2] = &sc;
+
+  /* Initialize the cif */
+  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
+                    &ffi_type_sint, args) == FFI_OK);
+
+  si = -6;
+  ss = -12;
+  sc = -1;
+
+  checking (si, ss, sc);
+
+  ffi_call(&cif, FFI_FN(checking), &rint, values);
+
+  printf ("%d vs %d\n", (int)rint, checking (si, ss, sc));
+
+  CHECK(rint != 0);
+
+  exit (0);
+}