+2011-01-07 Jan Hubicka <jh@suse.cz>
+
+ PR tree-optimization/46367
+ * ipa-inline.c (cgraph_clone_inlined_nodes): Use original function only
+ when we can update original.
+ (cgraph_mark_inline_edge): Sanity check.
+ * ipa-prop.c (ipa_make_edge_direct_to_target): Sanity check.
+
2011-01-07 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* config/spu/spu.h (ASM_COMMENT_START): Define.
/* We may eliminate the need for out-of-line copy to be output.
In that case just go ahead and re-use it. */
if (!e->callee->callers->next_caller
+ /* Recursive inlining never wants the master clone to be overwritten. */
+ && update_original
/* FIXME: When address is taken of DECL_EXTERNAL function we still can remove its
offline copy, but we would need to keep unanalyzed node in the callgraph so
references can point to it. */
struct cgraph_edge *curr = e;
int freq;
+ /* Don't inline inlined edges. */
gcc_assert (e->inline_failed);
+ /* Don't even think of inlining inline clone. */
+ gcc_assert (!e->callee->global.inlined_to);
+
e->inline_failed = CIF_OK;
DECL_POSSIBLY_INLINED (e->callee->decl) = true;
master_clone = cgraph_clone_node (node, node->decl,
node->count, CGRAPH_FREQ_BASE, 1,
false, NULL);
- master_clone->needed = true;
for (e = master_clone->callees; e; e = e->next_callee)
if (!e->inline_failed)
cgraph_clone_inlined_nodes (e, true, false);
return NULL;
ipa_check_create_node_params ();
+ /* We can not make edges to inline clones. It is bug that someone removed the cgraph
+ node too early. */
+ gcc_assert (!callee->global.inlined_to);
+
cgraph_make_edge_direct (ie, callee, delta ? tree_low_cst (delta, 0) : 0);
if (dump_file)
{