From c32f25b88513490bdefa864117808f7cbc84c0a0 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Mon, 28 Nov 2011 22:04:45 +0100
Subject: [PATCH] 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
---
 gcc/ChangeLog  |  5 +++++
 gcc/tree-ssa.c | 16 +++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8b978c0364ef..2910e81128e8 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 8f73d9176f2d..97857217ce7d 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.  */
-- 
GitLab