This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: Internal compiler error in gcc-2.95 19990623 on PowerPC
- To: Franz Sirl <Franz dot Sirl-kernel at lauterbach dot com>
- Subject: Re: Internal compiler error in gcc-2.95 19990623 on PowerPC
- From: David Edelsohn <dje at watson dot ibm dot com>
- Date: Wed, 30 Jun 1999 11:31:10 -0400
- Cc: law at cygnus dot com, Brian Downing <bdowning at wolfram dot com>, egcs-bugs at egcs dot cygnus dot com
>>>>> Franz Sirl writes:
Franz> (insn 51 46 52 (set (mem:DF (pre_inc:SI (reg/v:SI 86)) 0)
Franz> (reg:DF 100)) 440 {*movdf_hardfloat32} (nil)
Franz> (expr_list:REG_INC (reg/v:SI 86)
Franz> (nil)))
Franz> I think it's barfing on the pre_inc in insn 51.
Yes, that instruction definitely looks strange. This, however, is
not a valid addressing mode and should have been rejected by
GO_IF_LEGITIMATE_ADDRESS. PRE_INC and PRE_DEC only are valid with an
offsettable-type address. Maybe this very old GO_IF_LEGITIMATE_ADDRESS
code is not tight enough:
if ((GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \
&& TARGET_UPDATE \
&& LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0))) \
It checks for a valid base register in XEXP (X, 0), but does not check
that XEXP (X, 1) is if it exists. It seems to assume that XEXP (X, 1)
would not be present.
David