more on Solaris internal compiler error
Jeffrey A Law
law@cygnus.com
Sat Nov 8 09:24:00 GMT 1997
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
More information about the Gcc
mailing list