aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-04-29 10:37:14 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-04-29 10:37:14 +0000
commit3a19701a09db9a65dd41b6085e4a445d350b2a87 (patch)
tree6399c7826c0f616a3f2f2289039d49d7cd482312
parent9ddffe321a71a66a972b68497ecccaa1df2c6c4f (diff)
downloadgcc-3a19701a09db9a65dd41b6085e4a445d350b2a87.zip
gcc-3a19701a09db9a65dd41b6085e4a445d350b2a87.tar.gz
gcc-3a19701a09db9a65dd41b6085e4a445d350b2a87.tar.bz2
tree-cfg.c (verify_types_in_gimple_reference): Add require_lvalue parameter.
2009-04-29 Richard Guenther <rguenther@suse.de> * tree-cfg.c (verify_types_in_gimple_reference): Add require_lvalue parameter. Allow invariants as base if !require_lvalue. (verify_gimple_assign_single): Adjust. From-SVN: r146947
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-cfg.c14
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index be525c3..a6e64b9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-29 Richard Guenther <rguenther@suse.de>
+
+ * tree-cfg.c (verify_types_in_gimple_reference): Add require_lvalue
+ parameter. Allow invariants as base if !require_lvalue.
+ (verify_gimple_assign_single): Adjust.
+
2009-04-29 Bernd Schmidt <bernd.schmidt@analog.com>
* config/bfin/bfin.md (sp_or_sm, spm_string, spm_name): New macro.
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 78f82a2..0ef2fb9 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3135,11 +3135,12 @@ verify_types_in_gimple_min_lval (tree expr)
return false;
}
-/* Verify if EXPR is a valid GIMPLE reference expression. Returns true
+/* Verify if EXPR is a valid GIMPLE reference expression. If
+ REQUIRE_LVALUE is true verifies it is an lvalue. Returns true
if there is an error, otherwise false. */
static bool
-verify_types_in_gimple_reference (tree expr)
+verify_types_in_gimple_reference (tree expr, bool require_lvalue)
{
while (handled_component_p (expr))
{
@@ -3211,7 +3212,8 @@ verify_types_in_gimple_reference (tree expr)
expr = op;
}
- return verify_types_in_gimple_min_lval (expr);
+ return ((require_lvalue || !is_gimple_min_invariant (expr))
+ && verify_types_in_gimple_min_lval (expr));
}
/* Returns true if there is one pointer type in TYPE_POINTER_TO (SRC_OBJ)
@@ -3747,7 +3749,7 @@ verify_gimple_assign_single (gimple stmt)
}
if (handled_component_p (lhs))
- res |= verify_types_in_gimple_reference (lhs);
+ res |= verify_types_in_gimple_reference (lhs, true);
/* Special codes we cannot handle via their class. */
switch (rhs_code)
@@ -3770,7 +3772,7 @@ verify_gimple_assign_single (gimple stmt)
return true;
}
- return verify_types_in_gimple_reference (op);
+ return verify_types_in_gimple_reference (op, true);
}
/* tcc_reference */
@@ -3793,7 +3795,7 @@ verify_gimple_assign_single (gimple stmt)
debug_generic_stmt (rhs1);
return true;
}
- return res || verify_types_in_gimple_reference (rhs1);
+ return res || verify_types_in_gimple_reference (rhs1, false);
/* tcc_constant */
case SSA_NAME: