This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[IRIX 6/Solaris 7] ICE in emit_move_insn_1()


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]