gimple-fold.c (fold_gimple_assign): Properly build a null-pointer constant when devirtualizing addresses.
2014-08-19 Richard Biener <rguenther@suse.de> * gimple-fold.c (fold_gimple_assign): Properly build a null-pointer constant when devirtualizing addresses. From-SVN: r214141
This commit is contained in:
parent
a98c0e91c7
commit
3ef276e442
|
@ -1,3 +1,8 @@
|
|||
2014-08-19 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* gimple-fold.c (fold_gimple_assign): Properly build a
|
||||
null-pointer constant when devirtualizing addresses.
|
||||
|
||||
2014-07-07 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* dwarf2out.c (decl_quals): New function.
|
||||
|
|
|
@ -319,14 +319,6 @@ fold_gimple_assign (gimple_stmt_iterator *si)
|
|||
= 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 *si)
|
|||
"reference to function %s\n",
|
||||
targets.length () == 1
|
||||
? targets[0]->name ()
|
||||
: "__builtin_unreachable");
|
||||
: "NULL");
|
||||
}
|
||||
val = fold_convert (TREE_TYPE (val),
|
||||
build_fold_addr_expr_loc (loc, fndecl));
|
||||
STRIP_USELESS_TYPE_CONVERSION (val);
|
||||
if (targets.length () == 1)
|
||||
{
|
||||
val = fold_convert (TREE_TYPE (val),
|
||||
build_fold_addr_expr_loc
|
||||
(loc, targets[0]->decl));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue