Hello, I send patch for PR61642. Changelog: 2014-06-11 Martin Liska <mli...@suse.cz>
* ipa-prop.c (ipa_make_edge_direct_to_target): Check that gimple call statement is reachable. Bootstrapped and regtested on x86_64-unknown-linux-gnu. Ready for trunk? Martin
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index d02093a..1ffd173 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -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);