This is the mail archive of the gcc@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]

Re: more on Solaris internal compiler error



  In message <199711080745.XAA20966@atrus.synopsys.com>you write:
  > Earlier I reported an internal compiler error that seems to make vectors
  > of class objects unusable on Solaris.  I reduced the problem still more,
  > down to the file that appears at the end of this message.  I made a stab
  > at debugging it, and to make my life easier decided to build a cc1plus
  > with the old gcc (2.7.2.1) and CFLAGS=-g for easier debugging and
  > Purify'ing.  But the resulting compiler behaves differently than the
  > bootstrapped, optimized compiler.  The debug compiler gives
  > 
  > foo3.cxx:31: internal error--insn does not satisfy its constraints:
  > (insn 166 162 167 (set (reg/v:SI 8 %o0)
  >         (reg/v:SI 107)) 111 {*movsi_insn} (nil)
  >     (expr_list:REG_DEAD (reg/v:SI 107)
  >         (nil)))
  > foo3.cxx:31: confused by earlier errors, bailing out
This is a flow problem.

Brendan -- I think this is the same basic bug you posted to gcc-local
earlier today.  

We have one set of reg107 and two refs of reg107.

One set & ref occurs in bb X the other ref is in bb Y.

flow is putting a REG_DEAD note on the ref in bb X, and combine
is completely eliminating the register in bb X.  When it does
so it sets REG_N_REFS to zero, which keeps the pseudo from being
allocated to a hard reg.

However, that leaves a ref in bb Y, which causes bad things to
happen.

I'm working on it (from Joe's testcase since it's a whole lot
simpler :-)

jeff


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