OSDN Git Service

* var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 May 2010 09:25:01 +0000 (09:25 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 04:59:13 +0000 (13:59 +0900)
in a temporary instead of invoking the macro multiple times.
(track_expr_p): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159058 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/var-tracking.c

index 5eed15d..6d232bb 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value
+       in a temporary instead of invoking the macro multiple times.
+       (track_expr_p): Likewise.
+
 2010-05-04  Neil Vachharajani <nvachhar@google.com>
 
        * doc/invoke.texi (-Wcoverage-mismatch): Updated documentation as
index 55de209..040a3e7 100644 (file)
@@ -1573,9 +1573,12 @@ static inline tree
 var_debug_decl (tree decl)
 {
   if (decl && DECL_P (decl)
-      && DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl)
-      && DECL_P (DECL_DEBUG_EXPR (decl)))
-    decl = DECL_DEBUG_EXPR (decl);
+      && DECL_DEBUG_EXPR_IS_FROM (decl))
+    {
+      tree debugdecl = DECL_DEBUG_EXPR (decl);
+      if (debugdecl && DECL_P (debugdecl))
+       decl = debugdecl;
+    }
 
   return decl;
 }
@@ -4497,12 +4500,14 @@ track_expr_p (tree expr, bool need_rtl)
      don't need to track this expression if the ultimate declaration is
      ignored.  */
   realdecl = expr;
-  if (DECL_DEBUG_EXPR_IS_FROM (realdecl) && DECL_DEBUG_EXPR (realdecl))
+  if (DECL_DEBUG_EXPR_IS_FROM (realdecl))
     {
       realdecl = DECL_DEBUG_EXPR (realdecl);
+      if (realdecl == NULL_TREE)
+       realdecl = expr;
       /* ??? We don't yet know how to emit DW_OP_piece for variable
         that has been SRA'ed.  */
-      if (!DECL_P (realdecl))
+      else if (!DECL_P (realdecl))
        return 0;
     }