From 8b592de00624d2a4dbac168c20d1e240034aa0cf Mon Sep 17 00:00:00 2001 From: steven Date: Tue, 1 Feb 2005 22:50:12 +0000 Subject: [PATCH] PR tree-optimization/19217 * tree-cfg.c (verify_expr): Use the data field to see if TP was seen inside a PHI node. Do not do the ADDR_EXPR check if it was. (verify_stmts): Pass (void*)1 as data to verify_expr to signal that it is walking a PHI node. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94570 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/tree-cfg.c | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7354034..ac04aeb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-02-01 Steven Bosscher + + PR tree-optimization/19217 + * tree-cfg.c (verify_expr): Use the data field to see if TP was + seen inside a PHI node. Do not do the ADDR_EXPR check if it was. + (verify_stmts): Pass (void*)1 as data to verify_expr to signal + that it is walking a PHI node. + 2005-02-01 Joseph S. Myers * doc/extend.texi (Nested Functions): Update. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 4df5855..ba4fbdc 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3231,12 +3231,14 @@ has_label_p (basic_block bb, tree label) /* Callback for walk_tree, check that all elements with address taken are - properly noticed as such. */ + properly noticed as such. The DATA is an int* that is 1 if TP was seen + inside a PHI node. */ static tree verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) { tree t = *tp, x; + bool in_phi = (data != NULL); if (TYPE_P (t)) *walk_subtrees = 0; @@ -3270,6 +3272,16 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) break; case ADDR_EXPR: + /* ??? tree-ssa-alias.c may have overlooked dead PHI nodes, missing + dead PHIs that take the address of something. But if the PHI + result is dead, the fact that it takes the address of anything + is irrelevant. Because we can not tell from here if a PHI result + is dead, we just skip this check for PHIs altogether. This means + we may be missing "valid" checks, but what can you do? + This was PR19217. */ + if (in_phi) + break; + /* Skip any references (they will be checked when we recurse down the tree) and ensure that any variable used as a prefix is marked addressable. */ @@ -3546,7 +3558,7 @@ verify_stmts (void) err |= true; } - addr = walk_tree (&t, verify_expr, NULL, NULL); + addr = walk_tree (&t, verify_expr, (void *) 1, NULL); if (addr) { debug_generic_stmt (addr); -- 2.7.4