mirror of git://gcc.gnu.org/git/gcc.git
cgraph.c (cgraph_create_edge, [...]): Set proper cfun.
* cgraph.c (cgraph_create_edge, cgraph_set_call_stmt): Set proper cfun. (dump_cgraph_node): Dump can throw external flag. * ipa-pure-const.c (propagate): Fix propagation of nothrow flags. From-SVN: r146349
This commit is contained in:
parent
9b074dc6c1
commit
b6fa5b0101
|
@ -1,3 +1,9 @@
|
||||||
|
2009-04-19 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* cgraph.c (cgraph_create_edge, cgraph_set_call_stmt): Set proper cfun.
|
||||||
|
(dump_cgraph_node): Dump can throw external flag.
|
||||||
|
* ipa-pure-const.c (propagate): Fix propagation of nothrow flags.
|
||||||
|
|
||||||
2009-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
2009-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||||
|
|
||||||
PR c/32061
|
PR c/32061
|
||||||
|
|
|
@ -640,7 +640,9 @@ cgraph_set_call_stmt (struct cgraph_edge *e, gimple new_stmt)
|
||||||
htab_hash_pointer (e->call_stmt));
|
htab_hash_pointer (e->call_stmt));
|
||||||
}
|
}
|
||||||
e->call_stmt = new_stmt;
|
e->call_stmt = new_stmt;
|
||||||
|
push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
|
||||||
e->can_throw_external = stmt_can_throw_external (new_stmt);
|
e->can_throw_external = stmt_can_throw_external (new_stmt);
|
||||||
|
pop_cfun ();
|
||||||
if (e->caller->call_site_hash)
|
if (e->caller->call_site_hash)
|
||||||
{
|
{
|
||||||
void **slot;
|
void **slot;
|
||||||
|
@ -705,7 +707,9 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee,
|
||||||
edge->caller = caller;
|
edge->caller = caller;
|
||||||
edge->callee = callee;
|
edge->callee = callee;
|
||||||
edge->call_stmt = call_stmt;
|
edge->call_stmt = call_stmt;
|
||||||
|
push_cfun (DECL_STRUCT_FUNCTION (caller->decl));
|
||||||
edge->can_throw_external = stmt_can_throw_external (call_stmt);
|
edge->can_throw_external = stmt_can_throw_external (call_stmt);
|
||||||
|
pop_cfun ();
|
||||||
edge->prev_caller = NULL;
|
edge->prev_caller = NULL;
|
||||||
edge->next_caller = callee->callers;
|
edge->next_caller = callee->callers;
|
||||||
if (callee->callers)
|
if (callee->callers)
|
||||||
|
@ -1238,6 +1242,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node)
|
||||||
edge->frequency / (double)CGRAPH_FREQ_BASE);
|
edge->frequency / (double)CGRAPH_FREQ_BASE);
|
||||||
if (edge->loop_nest)
|
if (edge->loop_nest)
|
||||||
fprintf (f, "(nested in %i loops) ", edge->loop_nest);
|
fprintf (f, "(nested in %i loops) ", edge->loop_nest);
|
||||||
|
if (edge->can_throw_external)
|
||||||
|
fprintf(f, "(can throw external) ");
|
||||||
}
|
}
|
||||||
fprintf (f, "\n");
|
fprintf (f, "\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -830,6 +830,7 @@ propagate (void)
|
||||||
w = node;
|
w = node;
|
||||||
while (w)
|
while (w)
|
||||||
{
|
{
|
||||||
|
funct_state w_l = get_function_state (w);
|
||||||
if (!can_throw && !TREE_NOTHROW (w->decl))
|
if (!can_throw && !TREE_NOTHROW (w->decl))
|
||||||
{
|
{
|
||||||
struct cgraph_edge *e;
|
struct cgraph_edge *e;
|
||||||
|
@ -840,6 +841,8 @@ propagate (void)
|
||||||
fprintf (dump_file, "Function found to be nothrow: %s\n",
|
fprintf (dump_file, "Function found to be nothrow: %s\n",
|
||||||
cgraph_node_name (w));
|
cgraph_node_name (w));
|
||||||
}
|
}
|
||||||
|
else if (can_throw && !TREE_NOTHROW (w->decl))
|
||||||
|
w_l->can_throw = true;
|
||||||
w_info = (struct ipa_dfs_info *) w->aux;
|
w_info = (struct ipa_dfs_info *) w->aux;
|
||||||
w = w_info->next_cycle;
|
w = w_info->next_cycle;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue