Valgrind complains: ==27870== Conditional jump or move depends on uninitialised value(s) ==27870== at 0x557CDC: cgraph_create_edge_1(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:695) ==27870== by 0x55882E: cgraph_create_edge(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:890) ==27870== by 0x560891: cgraph_clone_edge(cgraph_edge*, cgraph_node*, gimple_statement_d*, unsigned int, long, int, bool) (cgraphclones.c:135) ==27870== by 0x7F1F14: copy_body(copy_body_data*, long, int, basic_block_def*, basic_block_def*, basic_block_def*) (tree-inline.c:1741) ... ==27870== Uninitialised value was created by a client request ==27870== at 0x50BBEE: ggc_internal_alloc_stat(unsigned long) (ggc-page.c:1339) ==27870== by 0x557D92: cgraph_create_edge_1(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:842) ==27870== by 0x55882E: cgraph_create_edge(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:890) ==27870== by 0x560891: cgraph_clone_edge(cgraph_edge*, cgraph_node*, gimple_statement_d*, unsigned int, long, int, bool) (cgraphclones.c:135) ,,,
This happens because e->indirect_unknown_callee may be uninitialized in cgraph_add_edge_to_call_site_hash. Fixed by initializing it earlier. LTO bootstrapped and tested on x86_64-unknown-linux-gnu. Please apply, if this looks reasonable. Thanks. 2013-10-15 Markus Trippelsdorf <mar...@trippelsdorf.de> PR ipa/58712 * cgraph.c (cgraph_create_edge_1): Initialize indirect_unknown_callee earlier. (cgraph_create_edge): Likewise. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 124ee0adf855..c5c4e13ba145 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -874,6 +874,7 @@ cgraph_create_edge_1 (struct cgraph_node *caller, struct cgraph_node *callee, edge->indirect_info = NULL; edge->indirect_inlining_edge = 0; edge->speculative = false; + edge->indirect_unknown_callee = 0; if (call_stmt && caller->call_site_hash) cgraph_add_edge_to_call_site_hash (edge); @@ -889,7 +890,6 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee, struct cgraph_edge *edge = cgraph_create_edge_1 (caller, callee, call_stmt, count, freq); - edge->indirect_unknown_callee = 0; initialize_inline_failed (edge); edge->next_caller = callee->callers; -- Markus