re PR ipa/61462 (ICE in ipa-prop.c:2562 caused by missing edge gimple call stmt)

PR ipa/61462
	* ipa-prop.c (ipa_make_edge_direct_to_target): Check that gimple call
	statement is reachable.

From-SVN: r211490
This commit is contained in:
Martin Liska 2014-06-12 09:48:23 +02:00 committed by Martin Liska
parent f961457f88
commit 3c9e6fca81
2 changed files with 30 additions and 10 deletions

View File

@ -1,3 +1,9 @@
2014-06-12 Martin Liska <mliska@suse.cz>
PR ipa/61462
* ipa-prop.c (ipa_make_edge_direct_to_target): Check that gimple call
statement is reachable.
2014-06-11 Jan Hubicka <hubicka@ucw.cz>
* symtab.c (section_hash): New hash.

View File

@ -2673,13 +2673,19 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
if (dump_enabled_p ())
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"discovered direct call to non-function in %s/%i, "
"making it __builtin_unreachable\n",
ie->caller->name (),
ie->caller->order);
const char *fmt = "discovered direct call to non-function in %s/%i, "
"making it __builtin_unreachable\n";
if (ie->call_stmt)
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
ie->caller->name (), ie->caller->order);
}
else if (dump_file)
fprintf (dump_file, fmt, ie->caller->name (), ie->caller->order);
}
target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
callee = cgraph_get_create_node (target);
unreachable = true;
@ -2739,10 +2745,18 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
}
if (dump_enabled_p ())
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
"converting indirect call in %s to direct call to %s\n",
ie->caller->name (), callee->name ());
const char *fmt = "converting indirect call in %s to direct call to %s\n";
if (ie->call_stmt)
{
location_t loc = gimple_location (ie->call_stmt);
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
ie->caller->name (), callee->name ());
}
else if (dump_file)
fprintf (dump_file, fmt, ie->caller->name (), callee->name ());
}
ie = cgraph_make_edge_direct (ie, callee);
es = inline_edge_summary (ie);