aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2014-03-21 13:59:35 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2014-03-21 13:59:35 +0100
commit3d8d00439b8507ebb9c89949d44133bbdcde333f (patch)
tree9a7d70708594301be7def95ae86b5e51f4577ef8 /gcc/ipa.c
parentd833415cdac558ab5da28048154d119856b62ad6 (diff)
downloadgcc-3d8d00439b8507ebb9c89949d44133bbdcde333f.zip
gcc-3d8d00439b8507ebb9c89949d44133bbdcde333f.tar.gz
gcc-3d8d00439b8507ebb9c89949d44133bbdcde333f.tar.bz2
re PR ipa/59176 (ICE edge points to wrong declaration / verify_cgraph_node failed)
2014-03-21 Martin Jambor <mjambor@suse.cz> PR ipa/59176 * cgraph.h (symtab_node): New flag body_removed. * ipa.c (symtab_remove_unreachable_nodes): Set body_removed flag when removing bodies. * symtab.c (dump_symtab_base): Dump body_removed flag. * cgraph.c (verify_edge_corresponds_to_fndecl): Skip nodes which had their bodies removed. testsuite/ * g++.dg/torture/pr59176.C: New test. From-SVN: r208748
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 164de0d..d230312 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -484,6 +484,7 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
{
if (file)
fprintf (file, " %s", node->name ());
+ node->body_removed = true;
node->analyzed = false;
node->definition = false;
node->cpp_implicit_alias = false;
@@ -543,6 +544,7 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
fprintf (file, " %s", vnode->name ());
changed = true;
}
+ vnode->body_removed = true;
vnode->definition = false;
vnode->analyzed = false;
vnode->aux = NULL;