aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-03-21 11:54:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-03-21 11:54:27 +0000
commit50d4421cb29f3d9bc1fd5b06dbde5b19b82a14e3 (patch)
tree11ea563795934cef19ae37fdd0912fedd9a5b666
parent839b422f0838f87583907b8146e9fc7ad111cad0 (diff)
downloadgcc-50d4421cb29f3d9bc1fd5b06dbde5b19b82a14e3.zip
gcc-50d4421cb29f3d9bc1fd5b06dbde5b19b82a14e3.tar.gz
gcc-50d4421cb29f3d9bc1fd5b06dbde5b19b82a14e3.tar.bz2
tree-cfg.c (verify_expr_no_block): New function.
2013-03-21 Richard Biener <rguenther@suse.de> * tree-cfg.c (verify_expr_no_block): New function. (verify_expr_location_1): Verify that neither DECL_DEBUG_EXPR nor DECL_VALUE_EXPR have locations with associated blocks. * tree-ssa-live.c (clear_unused_block_pointer_1): Remove. (clear_unused_block_pointer): Remove code dealing with blocks in DECL_DEBUG_EXPR locations. From-SVN: r196865
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/tree-cfg.c30
-rw-r--r--gcc/tree-ssa-live.c14
3 files changed, 38 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 499e9d3..a4b0763 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2013-03-21 Richard Biener <rguenther@suse.de>
+ * tree-cfg.c (verify_expr_no_block): New function.
+ (verify_expr_location_1): Verify that neither DECL_DEBUG_EXPR
+ nor DECL_VALUE_EXPR have locations with associated blocks.
+ * tree-ssa-live.c (clear_unused_block_pointer_1): Remove.
+ (clear_unused_block_pointer): Remove code dealing with
+ blocks in DECL_DEBUG_EXPR locations.
+
+2013-03-21 Richard Biener <rguenther@suse.de>
+
* tree.h (DECL_DEBUG_EXPR_IS_FROM): Rename to ...
(DECL_HAS_DEBUG_EXPR_P): ... this. Guard properly.
* tree.c (copy_node_stat): Do not copy DECL_HAS_DEBUG_EXPR_P.
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 6e6b2c5..c3771e5 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -4516,6 +4516,24 @@ verify_location (pointer_set_t *blocks, location_t loc)
return false;
}
+/* Called via walk_tree. Verify that expressions have no blocks. */
+
+static tree
+verify_expr_no_block (tree *tp, int *walk_subtrees, void *)
+{
+ if (!EXPR_P (*tp))
+ {
+ *walk_subtrees = false;
+ return NULL;
+ }
+
+ location_t loc = EXPR_LOCATION (*tp);
+ if (LOCATION_BLOCK (loc) != NULL)
+ return *tp;
+
+ return NULL;
+}
+
/* Called via walk_tree. Verify locations of expressions. */
static tree
@@ -4527,7 +4545,17 @@ verify_expr_location_1 (tree *tp, int *walk_subtrees, void *data)
&& DECL_HAS_DEBUG_EXPR_P (*tp))
{
tree t = DECL_DEBUG_EXPR (*tp);
- tree addr = walk_tree (&t, verify_expr_location_1, blocks, NULL);
+ tree addr = walk_tree (&t, verify_expr_no_block, NULL, NULL);
+ if (addr)
+ return addr;
+ }
+ if ((TREE_CODE (*tp) == VAR_DECL
+ || TREE_CODE (*tp) == PARM_DECL
+ || TREE_CODE (*tp) == RESULT_DECL)
+ && DECL_HAS_VALUE_EXPR_P (*tp))
+ {
+ tree t = DECL_VALUE_EXPR (*tp);
+ tree addr = walk_tree (&t, verify_expr_no_block, NULL, NULL);
if (addr)
return addr;
}
diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c
index 713458f..7c763ea 100644
--- a/gcc/tree-ssa-live.c
+++ b/gcc/tree-ssa-live.c
@@ -620,11 +620,6 @@ clear_unused_block_pointer_1 (tree *tp, int *, void *)
if (EXPR_P (*tp) && TREE_BLOCK (*tp)
&& !TREE_USED (TREE_BLOCK (*tp)))
TREE_SET_BLOCK (*tp, NULL);
- if (TREE_CODE (*tp) == VAR_DECL && DECL_HAS_DEBUG_EXPR_P (*tp))
- {
- tree debug_expr = DECL_DEBUG_EXPR (*tp);
- walk_tree (&debug_expr, clear_unused_block_pointer_1, NULL, NULL);
- }
return NULL_TREE;
}
@@ -636,15 +631,6 @@ clear_unused_block_pointer (void)
{
basic_block bb;
gimple_stmt_iterator gsi;
- tree t;
- unsigned i;
-
- FOR_EACH_LOCAL_DECL (cfun, i, t)
- if (TREE_CODE (t) == VAR_DECL && DECL_HAS_DEBUG_EXPR_P (t))
- {
- tree debug_expr = DECL_DEBUG_EXPR (t);
- walk_tree (&debug_expr, clear_unused_block_pointer_1, NULL, NULL);
- }
FOR_EACH_BB (bb)
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))