diff options
| author | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-01 22:50:12 +0000 |
|---|---|---|
| committer | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-01 22:50:12 +0000 |
| commit | 8b592de00624d2a4dbac168c20d1e240034aa0cf (patch) | |
| tree | ec7e286bc00ac8169243deab25f4be197318833c | |
| parent | dbb773648b318ebc771e8160d98eb8c7b1fdd001 (diff) | |
| download | ppe42-gcc-8b592de00624d2a4dbac168c20d1e240034aa0cf.tar.gz ppe42-gcc-8b592de00624d2a4dbac168c20d1e240034aa0cf.zip | |
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
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/tree-cfg.c | 16 |
2 files changed, 22 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73540341738..ac04aeb5c81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-02-01 Steven Bosscher <stevenb@suse.de> + + 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 <joseph@codesourcery.com> * doc/extend.texi (Nested Functions): Update. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 4df58550c05..ba4fbdc0ac7 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); |

