aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-11-28 22:04:45 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-11-28 22:04:45 +0100
commitc32f25b88513490bdefa864117808f7cbc84c0a0 (patch)
tree8ed7735312bef73319357fb8f209e709ce05e839 /gcc
parentd3b623c7af627ec5d0fbd14d94a115b6cac0e501 (diff)
downloadgcc-c32f25b88513490bdefa864117808f7cbc84c0a0.zip
gcc-c32f25b88513490bdefa864117808f7cbc84c0a0.tar.gz
gcc-c32f25b88513490bdefa864117808f7cbc84c0a0.tar.bz2
re PR debug/50317 (missing DW_OP_GNU_implicit_pointer)
PR debug/50317 * tree-ssa.c (execute_update_addresses_taken): Remove var ={v} {CLOBBER} stmts instead of rewriting them into var_N ={v} {CLOBBER}. From-SVN: r181788
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-ssa.c16
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8b978c0..2910e81 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-11-28 Jakub Jelinek <jakub@redhat.com>
+ PR debug/50317
+ * tree-ssa.c (execute_update_addresses_taken): Remove
+ var ={v} {CLOBBER} stmts instead of rewriting them into
+ var_N ={v} {CLOBBER}.
+
PR middle-end/50907
* function.c (convert_jumps_to_returns): When redirecting an edge
succ to EXIT_BLOCK_PTR, clear EDGE_CROSSING flag.
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 8f73d91..9785721 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -2118,7 +2118,7 @@ execute_update_addresses_taken (void)
if (update_vops)
{
FOR_EACH_BB (bb)
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);)
{
gimple stmt = gsi_stmt (gsi);
@@ -2159,6 +2159,18 @@ execute_update_addresses_taken (void)
if (gimple_assign_lhs (stmt) != lhs)
gimple_assign_set_lhs (stmt, lhs);
+ /* For var ={v} {CLOBBER}; where var lost
+ TREE_ADDRESSABLE just remove the stmt. */
+ if (DECL_P (lhs)
+ && TREE_CLOBBER_P (rhs)
+ && symbol_marked_for_renaming (lhs))
+ {
+ unlink_stmt_vdef (stmt);
+ gsi_remove (&gsi, true);
+ release_defs (stmt);
+ continue;
+ }
+
if (gimple_assign_rhs1 (stmt) != rhs)
{
gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
@@ -2205,6 +2217,8 @@ execute_update_addresses_taken (void)
if (gimple_references_memory_p (stmt)
|| is_gimple_debug (stmt))
update_stmt (stmt);
+
+ gsi_next (&gsi);
}
/* Update SSA form here, we are called as non-pass as well. */