mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-21 13:39:39 +08:00
ffi.h.in (ffi_type_ulong, [...]): Define correctly for 32-bit architectures.
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. From-SVN: r115739
This commit is contained in:
parent
6583cf153d
commit
cb4132fe11
@ -1,3 +1,9 @@
|
||||
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.
|
||||
|
||||
2006-07-19 David Daney <ddaney@avtrex.com>
|
||||
|
||||
* testsuite/libffi.call/closure_fn6.c: Remove xfail for mips,
|
||||
|
@ -112,16 +112,24 @@ extern "C" {
|
||||
#error "int size not supported"
|
||||
#endif
|
||||
|
||||
#define ffi_type_ulong ffi_type_uint64
|
||||
#define ffi_type_slong ffi_type_sint64
|
||||
#if LONG_MAX == 2147483647
|
||||
# if FFI_LONG_LONG_MAX != 9223372036854775807
|
||||
#error "no 64-bit data type supported"
|
||||
#error "no 64-bit data type supported"
|
||||
# endif
|
||||
#elif LONG_MAX != 9223372036854775807
|
||||
#error "long size not supported"
|
||||
#endif
|
||||
|
||||
#if LONG_MAX == 2147483647
|
||||
# define ffi_type_ulong ffi_type_uint32
|
||||
# define ffi_type_slong ffi_type_sint32
|
||||
#elif LONG_MAX == 9223372036854775807
|
||||
# define ffi_type_ulong ffi_type_uint64
|
||||
# define ffi_type_slong ffi_type_sint64
|
||||
#else
|
||||
#error "long size not supported"
|
||||
#endif
|
||||
|
||||
/* The closure code assumes that this works on pointers, i.e. a size_t */
|
||||
/* can hold a pointer. */
|
||||
|
||||
|
38
libffi/testsuite/libffi.call/return_ul.c
Normal file
38
libffi/testsuite/libffi.call/return_ul.c
Normal file
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user