> > This fixes Honzas previous commit to not build &integer_zero_node (what?).
Oops, thanks! Honza > > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. > > Richard. > > 2014-08-19 Richard Biener <rguent...@suse.de> > > * gimple-fold.c (fold_gimple_assign): Properly build a > null-pointer constant when devirtualizing addresses. > > Index: gcc/gimple-fold.c > =================================================================== > --- gcc/gimple-fold.c (revision 214135) > +++ gcc/gimple-fold.c (working copy) > @@ -319,14 +319,6 @@ fold_gimple_assign (gimple_stmt_iterator > = possible_polymorphic_call_targets (rhs, stmt, &final); > if (final && targets.length () <= 1 && dbg_cnt (devirt)) > { > - tree fndecl; > - > - if (targets.length () == 1) > - fndecl = targets[0]->decl; > - else > - /* We can not use __builtin_unreachable here because it > - can not have address taken. */ > - fndecl = integer_zero_node; > if (dump_enabled_p ()) > { > location_t loc = gimple_location_safe (stmt); > @@ -335,11 +327,19 @@ fold_gimple_assign (gimple_stmt_iterator > "reference to function %s\n", > targets.length () == 1 > ? targets[0]->name () > - : "__builtin_unreachable"); > + : "NULL"); > + } > + if (targets.length () == 1) > + { > + val = fold_convert (TREE_TYPE (val), > + build_fold_addr_expr_loc > + (loc, targets[0]->decl)); > + STRIP_USELESS_TYPE_CONVERSION (val); > } > - val = fold_convert (TREE_TYPE (val), > - build_fold_addr_expr_loc (loc, fndecl)); > - STRIP_USELESS_TYPE_CONVERSION (val); > + else > + /* We can not use __builtin_unreachable here because it > + can not have address taken. */ > + val = build_int_cst (TREE_TYPE (val), 0); > return val; > } > }