Bug 46661 - 32-bit cls_pointer.c, cls_pointer_stack.c FAIL on IRIX 6.5
Summary: 32-bit cls_pointer.c, cls_pointer_stack.c FAIL on IRIX 6.5
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: libffi (show other bugs)
Version: 4.6.0
: P3 normal
Target Milestone: 4.6.0
Assignee: Rainer Orth
URL: http://gcc.gnu.org/ml/gcc-patches/201...
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-25 17:06 UTC by Rainer Orth
Modified: 2011-02-09 14:43 UTC (History)
2 users (show)

See Also:
Host: mips-sgi-irix6.5
Target: mips-sgi-irix6.5
Build: mips-sgi-irix6.5
Known to work:
Known to fail:
Last reconfirmed: 2011-02-08 11:36:42


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rainer Orth 2010-11-25 17:06:06 UTC
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.
Comment 1 Rainer Orth 2011-02-08 11:36:42 UTC
Mine, patch posted.
Comment 2 Rainer Orth 2011-02-09 10:01:11 UTC
Author: ro
Date: Wed Feb  9 10:01:07 2011
New Revision: 169963

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=169963
Log:
	PR libffi/46661
	* testsuite/libffi.call/cls_pointer.c (main): Cast void * to
	uintptr_t first.
	* testsuite/libffi.call/cls_pointer_stack.c (main): Likewise.

Modified:
    trunk/libffi/ChangeLog
    trunk/libffi/testsuite/libffi.call/cls_pointer.c
    trunk/libffi/testsuite/libffi.call/cls_pointer_stack.c
Comment 3 Rainer Orth 2011-02-09 14:40:18 UTC
Author: ro
Date: Wed Feb  9 14:40:15 2011
New Revision: 169972

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=169972
Log:
	PR libffi/46661
	* testsuite/libffi.call/cls_pointer.c (main): Cast void * to
	uintptr_t first.
	* testsuite/libffi.call/cls_pointer_stack.c (main): Likewise.

Modified:
    branches/gcc-4_5-branch/libffi/ChangeLog
    branches/gcc-4_5-branch/libffi/testsuite/libffi.call/cls_pointer.c
    branches/gcc-4_5-branch/libffi/testsuite/libffi.call/cls_pointer_stack.c
Comment 4 Rainer Orth 2011-02-09 14:43:02 UTC
Fixed for 4.5.3, 4.6.0.