aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-01-19 13:40:39 +0100
committerRichard Biener <rguenther@suse.de>2021-01-19 14:32:14 +0100
commitf27cd6f42261e838677dfd0652f09cc0dfd6a42b (patch)
tree8e8a1608e48684b277f7097720aff9af0e649efc
parent4b690f161b82e428dbe648075da215daa52be0ea (diff)
downloadgcc-f27cd6f42261e838677dfd0652f09cc0dfd6a42b.zip
gcc-f27cd6f42261e838677dfd0652f09cc0dfd6a42b.tar.gz
gcc-f27cd6f42261e838677dfd0652f09cc0dfd6a42b.tar.bz2
middle-end/98638 - avoid SSA reference to stmts after SSA deconstruction
Since SSA names do leak into global tree data structures like TYPE_SIZE or in this case GFC_DECL_SAVED_DESCRIPTOR because of frontend bugs we have to be careful to wipe references to the CFG when we deconstruct SSA form because we now do ggc_free that. 2021-01-19 Richard Biener <rguenther@suse.de> PR middle-end/98638 * tree-ssanames.c (fini_ssanames): Zero SSA_NAME_DEF_STMT.
-rw-r--r--gcc/tree-ssanames.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c
index c293cc4..51a26d2 100644
--- a/gcc/tree-ssanames.c
+++ b/gcc/tree-ssanames.c
@@ -102,6 +102,14 @@ init_ssanames (struct function *fn, int size)
void
fini_ssanames (struct function *fn)
{
+ unsigned i;
+ tree name;
+ /* Some SSA names leak into global tree data structures so we can't simply
+ ggc_free them. But make sure to clear references to stmts since we now
+ ggc_free the CFG itself. */
+ FOR_EACH_VEC_SAFE_ELT (SSANAMES (fn), i, name)
+ if (name)
+ SSA_NAME_DEF_STMT (name) = NULL;
vec_free (SSANAMES (fn));
vec_free (FREE_SSANAMES (fn));
vec_free (FREE_SSANAMES_QUEUE (fn));