Commit 7a442a1d by Steven Bosscher Committed by Steven Bosscher

re PR tree-optimization/19217 (ICE: verify_stmts failed: address taken, but…

re PR tree-optimization/19217 (ICE: verify_stmts failed: address taken, but ADDRESSABLE bit not set)

	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.

From-SVN: r94570
parent 475b6e22
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.
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment