[PATCH] Fix devirtualization ICE (PR tree-optimization/59622, take 3)

Richard Biener rguenther@suse.de
Thu Jan 9 13:14:00 GMT 2014


On Thu, 9 Jan 2014, Jakub Jelinek wrote:

> On Thu, Jan 09, 2014 at 01:30:53PM +0100, Richard Biener wrote:
> > > gimplify_modify_expr has:
> > > 
> > >       if (!gimple_call_noreturn_p (assign))
> > >         gimple_call_set_lhs (assign, *to_p);
> > 
> > Ok, it seems to be too early then - move it after the folding.
> 
> That wouldn't help all the other early calls of fold_stmt though.
> E.g. lower_omp.  Plus, even in gimplify_modify_expr, doing it
> after fold_stmt would mean having to walk all stmts created by the folding?,
> check if they are calls (because a call can fold into nothing or something
> completely different).  Isn't it better then fold_stmt does that instead?

Hmm, maybe.  Not sure why we are this anal about requiring noreturn
calls not to have a LHS.  But if we require callers in SSA form
to update the stmt and properly cleanup the cfg if fold_stmt returns
true then it's reasonable to require at least "something" for callers
from non-SSA/CFG code.

That is, I don't like this special-casing.  If so, then rather
don't fold at this point - thus if (... !inplace && in_ssa_form (cfun) 
...) (or rather if we have a CFG - cfun && cfun->curr_properties & 
PROP_cfg).

Richard.



More information about the Gcc-patches mailing list