[Bug debug/60655] [4.9 Regression] ICE: output_operand: invalid expression as operand
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 31 09:56:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60655
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Ramana Radhakrishnan from comment #7)
> (In reply to Jakub Jelinek from comment #5)
> > As discussed yesterday with Ramana on IRC, my suggested fix for this for 4.9
> > is something like:
> > --- gcc/dwarf2out.c 2014-03-03 08:24:14.841895755 +0100
> > +++ gcc/dwarf2out.c 2014-03-26 10:42:32.027508796 +0100
> > @@ -11326,7 +11326,12 @@ const_ok_for_output_1 (rtx *rtlp, void *
> > }
> >
> > if (GET_CODE (rtl) != SYMBOL_REF)
> > - return 0;
> > + {
> > + /* NOT is not handled by output_addr_const. */
> > + if (GET_CODE (rtl) == NOT)
> > + return 1;
> > + return 0;
> > + }
> >
>
> In addition looks like we need to handle
>
> (minus (const_int) (sym_ref)) because with the reduced testcase with -g and
> removing the -fdata-sections I get an error with
>
> const ( minus (323) (sym_ref)) and gas won't grok that because there is no
> relocation that will deal with this.
Note that (minus 323 sym_ref) is canonicalized (plus (neg sym_ref) 323)
but it looks like this needs to go through some legitimize hook before
handing it to output_addr_const?
>
> (note 220 219 221 5 (var_location r2 (plus:SI (plus:SI (reg:SI 3 r3
> [orig:192 ivtmp.37 ] [192])
> (symbol_ref:SI ("*.LANCHOR0") [flags 0x182]))
> (const:SI (minus:SI (const_int 323 [0x143])
> (symbol_ref:SI ("*.LANCHOR0") [flags 0x182])))))
> NOTE_INSN_VAR_LOCATION)
>
> Uggh this is proving to be more ugly.
More information about the Gcc-bugs
mailing list