http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46661
Summary: 32-bit cls_pointer.c, cls_pointer_stack.c FAIL on IRIX
6.5
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libffi
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected], [email protected]
Host: mips-sgi-irix6.5
Target: mips-sgi-irix6.5
Build: mips-sgi-irix6.5
For the 32-bit N32 ABI, cls_pointer.c and cls_pointer_stack.c fail on IRIX 6.5:
FAIL: libffi.call/cls_pointer.c -O0 -W -Wall (test for excess errors)
Excess errors:
/vol/gcc/src/hg/trunk/irix/libffi/testsuite/libffi.call/cls_pointer.c: In
function 'main':
/vol/gcc/src/hg/trunk/irix/libffi/testsuite/libffi.call/cls_pointer.c:68:8:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
FAIL: libffi.call/cls_pointer_stack.c -O0 -W -Wall (test for excess errors)
Excess errors:
/vol/gcc/src/hg/trunk/irix/libffi/testsuite/libffi.call/cls_pointer_stack.c: In
function 'main':
/vol/gcc/src/hg/trunk/irix/libffi/testsuite/libffi.call/cls_pointer_stack.c:132:8:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
In both cases, a void * is casted to ffi_arg, which in the N32 case is
# ifdef FFI_MIPS_O32
/* O32 stack frames have 32bit integer args */
typedef unsigned int ffi_arg __attribute__((__mode__(__SI__)));
typedef signed int ffi_sarg __attribute__((__mode__(__SI__)));
#else
/* N32 and N64 frames have 64bit integer args */
typedef unsigned int ffi_arg __attribute__((__mode__(__DI__)));
typedef signed int ffi_sarg __attribute__((__mode__(__DI__)));
# endif
(cf. src/mips/ffitarget.h), i.e. a 64-bit type.
I'm not sure what the best way is to portably fix this.