From: Jan Hubicka Date: Sun, 19 Apr 2009 13:27:28 +0000 (+0200) Subject: cgraph.c (cgraph_create_edge, [...]): Set proper cfun. X-Git-Tag: releases/gcc-4.5.0~6408 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6fa5b01018ac42682f8d69fff9e48f50b87c910;p=thirdparty%2Fgcc.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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 09f17e570e3e..1343784fde1c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-19 Jan Hubicka + + * 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 PR c/32061 diff --git a/gcc/cgraph.c b/gcc/cgraph.c index f7189b92ecae..ce696e211b65 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 1aef09f5221e..c938b0da1c6a 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; }