--- gcc/tree-ssa.c.jj	2011-11-29 08:58:52.000000000 +0100
+++ gcc/tree-ssa.c	2011-12-02 15:04:03.494148642 +0100
@@ -264,7 +264,12 @@ target_for_debug_bind (tree var)
     return NULL_TREE;
 
   if (!is_gimple_reg (var))
-    return NULL_TREE;
+    {
+      if (is_gimple_reg_type (TREE_TYPE (var))
+	  && referenced_var_lookup (cfun, DECL_UID (var)) == NULL_TREE)
+	return var;
+      return NULL_TREE;
+    }
 
   return var;
 }
--- gcc/tree-ssa-live.c.jj	2011-12-02 01:52:27.000000000 +0100
+++ gcc/tree-ssa-live.c	2011-12-02 15:04:59.601816335 +0100
@@ -814,15 +814,7 @@ remove_unused_locals (void)
 	      bitmap_set_bit (global_unused_vars, DECL_UID (var));
 	    }
 	  else
-	    {
-	      /* For unreferenced local vars drop TREE_ADDRESSABLE
-		 bit in case it is referenced from debug stmts.  */
-	      if (DECL_CONTEXT (var) == current_function_decl
-		  && TREE_ADDRESSABLE (var)
-		  && is_gimple_reg_type (TREE_TYPE (var)))
-		TREE_ADDRESSABLE (var) = 0;
-	      continue;
-	    }
+	    continue;
 	}
       else if (TREE_CODE (var) == VAR_DECL
 	       && DECL_HARD_REGISTER (var)
--- gcc/cfgexpand.c.jj	2011-12-02 01:52:27.000000000 +0100
+++ gcc/cfgexpand.c	2011-12-02 15:24:37.982327507 +0100
@@ -3325,7 +3325,8 @@ expand_debug_expr (tree exp)
 	  if ((TREE_CODE (TREE_OPERAND (exp, 0)) == VAR_DECL
 	       || TREE_CODE (TREE_OPERAND (exp, 0)) == PARM_DECL
 	       || TREE_CODE (TREE_OPERAND (exp, 0)) == RESULT_DECL)
-	      && !TREE_ADDRESSABLE (TREE_OPERAND (exp, 0)))
+	      && (!TREE_ADDRESSABLE (TREE_OPERAND (exp, 0))
+		  || target_for_debug_bind (TREE_OPERAND (exp, 0))))
 	    return gen_rtx_DEBUG_IMPLICIT_PTR (mode, TREE_OPERAND (exp, 0));
 
 	  if (handled_component_p (TREE_OPERAND (exp, 0)))
@@ -3337,7 +3338,8 @@ expand_debug_expr (tree exp)
 	      if ((TREE_CODE (decl) == VAR_DECL
 		   || TREE_CODE (decl) == PARM_DECL
 		   || TREE_CODE (decl) == RESULT_DECL)
-		  && !TREE_ADDRESSABLE (decl)
+		  && (!TREE_ADDRESSABLE (decl)
+		      || target_for_debug_bind (decl))
 		  && (bitoffset % BITS_PER_UNIT) == 0
 		  && bitsize > 0
 		  && bitsize == maxsize)
