This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[IRIX 6/Solaris 7] ICE in emit_move_insn_1()
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: [IRIX 6/Solaris 7] ICE in emit_move_insn_1()
- From: Rainer Orth <ro at TechFak dot Uni-Bielefeld dot DE>
- Date: Thu, 1 Jul 1999 00:29:40 +0200 (MET DST)
I'm currently trying to debug the last problem with returning PARALLEL's
from function_arg() for the N32/N64 ABIs on IRIX 6 to finally fix the
non-ABI conformant structure passing conventions.
The following test causes cc1plus to abort in emit_move_insn_1():
struct empty {};
void efunc (empty);
void test ()
{
empty e;
efunc (e);
}
This is gcc version gcc-2.95 19990623 (prerelease) with the lastest expr.c
and a slightly updated version of my patch to activate returning PARALLEL's
from function_arg():
http://egcs.cygnus.com/ml/egcs-patches/1999-06/msg00621.html
./xgcc -B./ -v -S tlist.ii
Reading specs from ./specs
gcc version gcc-2.95 19990623 (prerelease)
./cc1plus tlist.ii -quiet -version -o tlist.s
GNU C++ version gcc-2.95 19990623 (prerelease) (mips-sgi-irix6.2) compiled by GNU C version gcc-2.95 19990623 (prerelease).
tlist.ii: In function `void test()':
tlist.ii:8: Internal compiler error in `emit_move_insn_1', at expr.c:2754
Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details.
The same failure occurs with an unmodified 64-bit Solaris 7 cc1plus:
./xgcc -B./ -v -m64 -S tlist.ii
Reading specs from ./specs
gcc version gcc-2.95 19990623 (prerelease)
./cc1plus tlist.ii -mptr64 -mcpu=v9 -mstack-bias -mno-v8plus -quiet -m64 -version -o tlist.s
GNU C++ version gcc-2.95 19990623 (prerelease) (sparc-sun-solaris2.7) compiled by GNU C version gcc-2.95 19990623 (prerelease).
tlist.ii: In function `void test()':
tlist.ii:8: Internal compiler error in `emit_move_insn_1', at expr.c:2698
Please submit a full bug report to `egcs-bugs@egcs.cygnus.com'.
See <URL:http://egcs.cygnus.com/faq.html#bugreport> for details.
What I've found out is that emit_group_load(dst, orig_src, align, size) is
called with
dst = (parallel:QI[
(expr_list (reg:DI 8 t0)
(const_int 0 [0x0]))
] )
orig_src = (const_int 0 [0x0])
align = 1
ssize = 1
The code enters the following test in emit_group_load()
src = orig_src;
if (GET_CODE (src) != MEM)
{
src = gen_reg_rtx (GET_MODE (orig_src));
emit_move_insn (src, orig_src);
}
calling emit_move_insn() and finally emit_move_insn_1() with
x = (reg 82)
y = (const_int 0 [0x0])
which aborts.
Any advice on how to fix this?
Rainer