summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-19 13:27:28 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-19 13:27:28 +0000
commitecfab407adc29d593a981d8da42eb3095bf3a1ad (patch)
tree3de074636f11edaf0156c7129cfe2c981b79b950
parentf577c4c6a932062d4e98f6950fc3c73f7762cd5e (diff)
downloadppe42-gcc-ecfab407adc29d593a981d8da42eb3095bf3a1ad.tar.gz
ppe42-gcc-ecfab407adc29d593a981d8da42eb3095bf3a1ad.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146349 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cgraph.c6
-rw-r--r--gcc/ipa-pure-const.c3
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 09f17e570e3..1343784fde1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
PR c/32061
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index f7189b92eca..ce696e211b6 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -640,7 +640,9 @@ cgraph_set_call_stmt (struct cgraph_edge *e, gimple new_stmt)
htab_hash_pointer (e->call_stmt));
}
e->call_stmt = new_stmt;
+ push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
e->can_throw_external = stmt_can_throw_external (new_stmt);
+ pop_cfun ();
if (e->caller->call_site_hash)
{
void **slot;
@@ -705,7 +707,9 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee,
edge->caller = caller;
edge->callee = callee;
edge->call_stmt = call_stmt;
+ push_cfun (DECL_STRUCT_FUNCTION (caller->decl));
edge->can_throw_external = stmt_can_throw_external (call_stmt);
+ pop_cfun ();
edge->prev_caller = NULL;
edge->next_caller = callee->callers;
if (callee->callers)
@@ -1238,6 +1242,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node)
edge->frequency / (double)CGRAPH_FREQ_BASE);
if (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");
}
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index 1aef09f5221..c938b0da1c6 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -830,6 +830,7 @@ propagate (void)
w = node;
while (w)
{
+ funct_state w_l = get_function_state (w);
if (!can_throw && !TREE_NOTHROW (w->decl))
{
struct cgraph_edge *e;
@@ -840,6 +841,8 @@ propagate (void)
fprintf (dump_file, "Function found to be nothrow: %s\n",
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 = w_info->next_cycle;
}
OpenPOWER on IntegriCloud