http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48585
Martin Jambor <jamborm at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu.org --- Comment #3 from Martin Jambor <jamborm at gcc dot gnu.org> 2011-04-13 14:55:48 UTC --- Compilation segfaults in LTRANS stage on line 1738 in tree-inline.c (the assert below) because the dereferenced dest is zero. /* Constant propagation on argument done during inlining may create new direct call. Produce an edge for it. */ if ((!edge || (edge->indirect_inlining_edge && id->transform_call_graph_edges == CB_CGE_MOVE_CLONES)) && (fn = gimple_call_fndecl (stmt)) != NULL) { struct cgraph_node *dest = cgraph_get_node (fn); /* We have missing edge in the callgraph. This can happen when previous inlining turned an indirect call into a direct call by constant propagating arguments or we are producing dead clone (for further cloning). In all other cases we hit a bug (incorrect node sharing is the most common reason for missing edges). */ gcc_assert (dest->needed || !dest->analyzed || dest->address_taken || !id->src_node->analyzed || !id->dst_node->analyzed); fn is <function_decl 0x7ffff65d3300 __comp_dtor> id->transform_call_graph_edges is CB_CGE_MOVE_CLONES calling cgraph_edge (id->dst_node, stmt) from within the debugger (to get edge which it says is optimized out) returns NULL. I'd rather avoid calling cgraph_get_create_node here, the node should be created by whatever inserts it into the IL. Let me check whether the bug goes away if I disable IPA-CP first.