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: unassig...@gcc.gnu.org ReportedBy: r...@gcc.gnu.org CC: gr...@redhat.com, andre...@gcc.gnu.org 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.