aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2009-11-17 10:35:51 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2009-11-17 09:35:51 +0000
commitf875410705747d41663d99d930469fd295a47a4b (patch)
tree5c2d2e6d83ad71202162d80457067c8abba0eec2 /gcc
parentaaf5d6c03bfda69eb7327584815380af73029da8 (diff)
downloadgcc-f875410705747d41663d99d930469fd295a47a4b.zip
gcc-f875410705747d41663d99d930469fd295a47a4b.tar.gz
gcc-f875410705747d41663d99d930469fd295a47a4b.tar.bz2
cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access removed node.
* cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access removed node. * cgraphunit.c (verify_cgraph_node): Verify frequencies for match. From-SVN: r154242
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cgraph.c2
-rw-r--r--gcc/cgraphunit.c12
3 files changed, 19 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index abe9443..b697ea4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-11-17 Jan Hubicka <jh@suse.cz>
+
+ * cgraph.c (cgraph_update_edges_for_call_stmt_node): Do not access
+ removed node.
+ * cgraphunit.c (verify_cgraph_node): Verify frequencies for match.
+
2009-11-17 Uros Bizjak <ubizjak@gmail.com>
* config/i386/predicates.md (x86_64_szext_general_operand): Do not
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index f2d7609..391882e 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -1000,10 +1000,10 @@ cgraph_update_edges_for_call_stmt_node (struct cgraph_node *node,
/* Otherwise remove edge and create new one; we can't simply redirect
since function has changed, so inline plan and other information
attached to edge is invalid. */
- cgraph_remove_edge (e);
count = e->count;
frequency = e->frequency;
loop_nest = e->loop_nest;
+ cgraph_remove_edge (e);
}
else
{
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 1c13f95..2c232a5 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -620,6 +620,18 @@ verify_cgraph_node (struct cgraph_node *node)
error ("caller edge frequency is too large");
error_found = true;
}
+ if (gimple_has_body_p (e->caller->decl)
+ && !e->caller->global.inlined_to
+ && (e->frequency
+ != compute_call_stmt_bb_frequency (e->caller->decl,
+ gimple_bb (e->call_stmt))))
+ {
+ error ("caller edge frequency %i does not match BB freqency %i",
+ e->frequency,
+ compute_call_stmt_bb_frequency (e->caller->decl,
+ gimple_bb (e->call_stmt)));
+ error_found = true;
+ }
if (!e->inline_failed)
{
if (node->global.inlined_to