From d601026d37980ee496362bfc870cdd76ad457fd3 Mon Sep 17 00:00:00 2001 From: kkojima Date: Sat, 2 Oct 2004 07:02:41 +0000 Subject: [PATCH] * testsuite/libffi.call/negint.c: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88421 138bc75d-0d04-0410-961f-82ee72b054a4 --- libffi/ChangeLog | 4 +++ libffi/testsuite/libffi.call/negint.c | 54 +++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 libffi/testsuite/libffi.call/negint.c diff --git a/libffi/ChangeLog b/libffi/ChangeLog index a172ea187e4..40e93964668 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,7 @@ +2004-10-02 Kaz Kojima + + * testsuite/libffi.call/negint.c: New test case. + 2004-09-14 H.J. Lu PR libgcj/17465 diff --git a/libffi/testsuite/libffi.call/negint.c b/libffi/testsuite/libffi.call/negint.c new file mode 100644 index 00000000000..1c8ed613562 --- /dev/null +++ b/libffi/testsuite/libffi.call/negint.c @@ -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] = ≻ + + /* 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); +} -- 2.11.0