]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/50317 (missing DW_OP_GNU_implicit_pointer)
authorJakub Jelinek <jakub@redhat.com>
Sat, 3 Dec 2011 16:39:56 +0000 (17:39 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 3 Dec 2011 16:39:56 +0000 (17:39 +0100)
PR debug/50317
* tree-ssa.c (target_for_debug_bind): Also allow is_gimple_reg_type
vars that aren't referenced.
(tree-ssa-live.c (remove_unused_locals): Don't clear TREE_ADDRESSABLE
of unreferenced local vars.
* cfgexpand.c (expand_debug_expr): For DEBUG_IMPLICIT_PTR allow also
TREE_ADDRESSABLE vars that satisfy target_for_debug_bind.

From-SVN: r181971

gcc/ChangeLog
gcc/cfgexpand.c
gcc/tree-ssa-live.c
gcc/tree-ssa.c

index 3b4bf139961db39dd90686c91f1569c66747c459..178e2224088fdf8c55e19135dc0a4cb0e96f6a81 100644 (file)
@@ -1,3 +1,13 @@
+2011-12-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/50317
+       * tree-ssa.c (target_for_debug_bind): Also allow is_gimple_reg_type
+       vars that aren't referenced.
+       (tree-ssa-live.c (remove_unused_locals): Don't clear TREE_ADDRESSABLE
+       of unreferenced local vars.
+       * cfgexpand.c (expand_debug_expr): For DEBUG_IMPLICIT_PTR allow also
+       TREE_ADDRESSABLE vars that satisfy target_for_debug_bind.
+
 2011-12-03  Anatoly Sokolov  <aesok@post.ru>
 
        * config/arm/arm.h (LIBCALL_VALUE, FUNCTION_VALUE_REGNO_P): Remove.
index e5a7a392eb473a5c8d6ef27823c90d80ada86f85..15e8231ca722f93a0d34c609fc62de28407c9279 100644 (file)
@@ -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)
index 103e4f7155ae01169d1fc0e1d6df2547f2c7846c..31eac11ba672f0887262f5f58f47fabbb338b53f 100644 (file)
@@ -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)
index 97857217ce7da39e5bfc2ab3e769903b92dafcee..8485af0a1654d11cda4616ad6360099fb8f6af9a 100644 (file)
@@ -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;
 }