error_found = true;
}
}
- else if (decl)
+ else if (!node->global.inlined_to
+ && !e->callee->global.inlined_to
+ && !clone_of_p (cgraph_node (decl), e->callee))
{
error ("an indirect edge with unknown callee "
"corresponding to a call_stmt with "
{
tree decl = node->decl;
if (DECL_PRESERVE_P (decl))
- {
- mark_decl_referenced (decl);
- if (node->local.finalized)
- cgraph_mark_needed_node (node);
- }
+ cgraph_mark_needed_node (node);
if (lookup_attribute ("externally_visible", DECL_ATTRIBUTES (decl)))
{
if (! TREE_PUBLIC (node->decl))
tree decl = vnode->decl;
if (DECL_PRESERVE_P (decl))
{
- mark_decl_referenced (decl);
vnode->force_output = true;
if (vnode->finalized)
varpool_mark_needed_node (vnode);
if (node->analyzed
&& !node->global.inlined_to
&& (node->needed || node->reachable_from_other_partition
+ || node->address_taken
|| (e && node->reachable))
&& !TREE_ASM_WRITTEN (decl)
&& !DECL_EXTERNAL (decl))
cgraph_remove_same_body_alias (node);
/* Since we want to emit the thunk, we explicitly mark its name as
referenced. */
- mark_decl_referenced (thunk_fndecl);
cgraph_add_new_function (thunk_fndecl, true);
bitmap_obstack_release (NULL);
}
gsi = gsi_for_stmt (e->call_stmt);
gsi_replace (&gsi, new_stmt, true);
- update_stmt (new_stmt);
/* Update EH information too, just in case. */
maybe_clean_or_replace_eh_stmt (e->call_stmt, new_stmt);
}
}
cgraph_materialize_clone (node);
+ stabilized = false;
}
- else
- stabilized = false;
}
}
}
push_cfun (DECL_STRUCT_FUNCTION (node->decl));
for (e = node->callees; e; e = e->next_callee)
cgraph_redirect_edge_call_stmt_to_callee (e);
- gcc_assert (!need_ssa_update_p (cfun));
pop_cfun ();
current_function_decl = NULL;
#ifdef ENABLE_CHECKING