re PR debug/47079 (FAIL: gcc.dg/guality/nrv-1.c)
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 19 Jan 2011 22:00:00 +0000 (22:00 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Wed, 19 Jan 2011 22:00:00 +0000 (22:00 +0000)
PR debug/47079
PR debug/46724
* function.c (instantiate_expr): Instantiate incoming rtl of
implicit arguments, and recurse on VALUE_EXPRs.
(instantiate_decls): Instantiate rtl and VALUE_EXPR of result.
* var-tracking.c (adjust_mems): Reject virtual_incoming_args_rtx.

From-SVN: r169034

gcc/ChangeLog
gcc/function.c
gcc/var-tracking.c

index 0e5d28205b4dc3bdb4b0d5503aa2d4fd67ee3db0..af91c9a4a808a75c9622fce28d693fdb24a6ddf7 100644 (file)
@@ -1,3 +1,12 @@
+2011-01-19  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/47079
+       PR debug/46724
+       * function.c (instantiate_expr): Instantiate incoming rtl of
+       implicit arguments, and recurse on VALUE_EXPRs.
+       (instantiate_decls): Instantiate rtl and VALUE_EXPR of result.
+       * var-tracking.c (adjust_mems): Reject virtual_incoming_args_rtx.
+
 2011-01-19  Alexandre Oliva  <aoliva@redhat.com>
 
        * c-parser.c (c_parser_for_statement): Initialize
index 73e59f98ba5056be2865e3d66ccd21718d97d94c..3f721fb1a2f2fe7ade1230391c9633c2e91155fc 100644 (file)
@@ -1784,8 +1784,21 @@ instantiate_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
   if (! EXPR_P (t))
     {
       *walk_subtrees = 0;
-      if (DECL_P (t) && DECL_RTL_SET_P (t))
-       instantiate_decl_rtl (DECL_RTL (t));
+      if (DECL_P (t))
+       {
+         if (DECL_RTL_SET_P (t))
+           instantiate_decl_rtl (DECL_RTL (t));
+         if (TREE_CODE (t) == PARM_DECL && DECL_NAMELESS (t)
+             && DECL_INCOMING_RTL (t))
+           instantiate_decl_rtl (DECL_INCOMING_RTL (t));
+         if ((TREE_CODE (t) == VAR_DECL
+              || TREE_CODE (t) == RESULT_DECL)
+             && DECL_HAS_VALUE_EXPR_P (t))
+           {
+             tree v = DECL_VALUE_EXPR (t);
+             walk_tree (&v, instantiate_expr, NULL, NULL);
+           }
+       }
     }
   return NULL;
 }
@@ -1835,6 +1848,18 @@ instantiate_decls (tree fndecl)
        }
     }
 
+  if ((decl = DECL_RESULT (fndecl))
+      && TREE_CODE (decl) == RESULT_DECL)
+    {
+      if (DECL_RTL_SET_P (decl))
+       instantiate_decl_rtl (DECL_RTL (decl));
+      if (DECL_HAS_VALUE_EXPR_P (decl))
+       {
+         tree v = DECL_VALUE_EXPR (decl);
+         walk_tree (&v, instantiate_expr, NULL, NULL);
+       }
+    }
+
   /* Now process all variables defined in the function or its subblocks.  */
   instantiate_decls_1 (DECL_INITIAL (fndecl));
 
index 58dce1b654eba6d0055bebedab5b51503bd1f023..e0477d40bcbf40336a61f2c096ed1e2b919afed0 100644 (file)
@@ -805,6 +805,7 @@ adjust_mems (rtx loc, const_rtx old_rtx, void *data)
               && hard_frame_pointer_adjustment != -1
               && cfa_base_rtx)
        return compute_cfa_pointer (hard_frame_pointer_adjustment);
+      gcc_checking_assert (loc != virtual_incoming_args_rtx);
       return loc;
     case MEM:
       mem = loc;