For x86 cross sh4-unknown-linux-gnu, 4.0.0 cc1plus segfaults
when compiling libstdc++-v3/src/localename.cc:

Program received signal SIGSEGV, Segmentation fault.
0x082d8e77 in regno_clobbered_p (regno=1139, insn=0x9bb9, mode=SImode, sets=0)
    at ../../ORIG/gcc/gcc/reload.c:6931
6931      unsigned int nregs = hard_regno_nregs[regno][mode];

and the backtrace is

#0  0x082d8e77 in regno_clobbered_p (regno=1139, insn=0x9bb9, mode=SImode,
    sets=0) at ../../ORIG/gcc/gcc/reload.c:6931
#1  0x082fe976 in emit_output_reload_insns (chain=0x92559e0, rl=0x84c7420, j=0)
    at ../../ORIG/gcc/gcc/reload1.c:6702
#2  0x082ff237 in do_output_reload (chain=0x92559e0, rl=0x84c7420, j=0)
    at ../../ORIG/gcc/gcc/reload1.c:6911
...

Thus the cause of segfault is that regno_clobbered_p is called for
a pseudo register 1139 while the first argument REGNO of regno_clobbered_p
must be a hard register:

regno_clobbered_p (unsigned int regno, rtx insn, enum machine_mode mode, int 
sets)
{
  unsigned int nregs = hard_regno_nregs[regno][mode];
  unsigned int endregno = regno + nregs;

-- 
           Summary: cc1plus segfaults when compiling libstdc++-
                    v3/src/localename.cc
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P2
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kkojima at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: sh4-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18511

Reply via email to