Internal compiler error in gcc-2.95 19990623 on PowerPC
David Edelsohn
dje@watson.ibm.com
Wed Jun 30 23:07:00 GMT 1999
>>>>> 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
More information about the Gcc-bugs
mailing list