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.

Reply via email to