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.

Reply via email to