+2008-03-22 Richard Guenther <rguenther@suse.de>
+
+ * tree-cfg.c (verify_expr): Recurse again for invariant addresses.
+ For PHI nodes verify the address is invariant.
+ * tree-ssa-ccp.c (ccp_decl_initial_min_invariant): Remove.
+ (get_symbol_constant_value): Use is_gimple_min_invariant.
+ (maybe_fold_stmt_indirect): Likewise.
+
2008-03-22 Richard Sandiford <rsandifo@nildram.co.uk>
PR rtl-optimization/33927
we may be missing "valid" checks, but what can you do?
This was PR19217. */
if (in_phi)
- break;
+ {
+ if (!is_gimple_min_invariant (t))
+ {
+ error ("non-invariant address expression in PHI argument");
+ return t;
+ }
+ break;
+ }
old_invariant = TREE_INVARIANT (t);
old_constant = TREE_CONSTANT (t);
return x;
}
- /* Stop recursing and verifying invariant ADDR_EXPRs, they tend
- to become arbitrary complicated. */
- if (is_gimple_min_invariant (t))
- *walk_subtrees = 0;
break;
}
}
-/* The regular is_gimple_min_invariant does a shallow test of the object.
- It assumes that full gimplification has happened, or will happen on the
- object. For a value coming from DECL_INITIAL, this is not true, so we
- have to be more strict ourselves. */
-
-static bool
-ccp_decl_initial_min_invariant (tree t)
-{
- if (!is_gimple_min_invariant (t))
- return false;
- if (TREE_CODE (t) == ADDR_EXPR)
- {
- /* Inline and unroll is_gimple_addressable. */
- while (1)
- {
- t = TREE_OPERAND (t, 0);
- if (is_gimple_id (t))
- return true;
- if (!handled_component_p (t))
- return false;
- }
- }
- return true;
-}
-
/* If SYM is a constant variable with known value, return the value.
NULL_TREE is returned otherwise. */
{
tree val = DECL_INITIAL (sym);
if (val
- && ccp_decl_initial_min_invariant (val))
+ && is_gimple_min_invariant (val))
return val;
/* Variables declared 'const' without an initializer
have zero as the intializer if they may not be
/* Fold away CONST_DECL to its value, if the type is scalar. */
if (TREE_CODE (base) == CONST_DECL
- && ccp_decl_initial_min_invariant (DECL_INITIAL (base)))
+ && is_gimple_min_invariant (DECL_INITIAL (base)))
return DECL_INITIAL (base);
/* Try folding *(&B+O) to B.X. */