+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.
/* 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;
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. */
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);