re PR debug/53820 (ICE in vt_expand_var_loc_chain, at var-tracking.c:8029)
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 6 Jul 2012 11:37:36 +0000 (11:37 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 6 Jul 2012 11:37:36 +0000 (11:37 +0000)
PR debug/53820
* var-tracking.c (vt_add_function_parameter): Convert
internal_arg_pointer into arg_pointer-based address even
without DRAP.

From-SVN: r189326

gcc/ChangeLog
gcc/var-tracking.c

index f7a65b96bc00285367473a781ee45510d9856059..9ccc668db32a54fc52c3b3e5235e4735d7ab656b 100644 (file)
@@ -1,3 +1,10 @@
+2012-07-06  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/53820
+       * var-tracking.c (vt_add_function_parameter): Convert
+       internal_arg_pointer into arg_pointer-based address even
+       without DRAP.
+
 2012-07-06  Alexandre Oilva  <aoliva@redhat.com>
 
        PR rtl-optimization/53827
index 66ce35a00954d46db3482909a362295d31d2b03a..5288c284227bb27f7b1c8351c1de5984552b680b 100644 (file)
@@ -9327,14 +9327,11 @@ vt_add_function_parameter (tree parm)
   if (GET_MODE (decl_rtl) == BLKmode || GET_MODE (incoming) == BLKmode)
     return;
 
-  /* If there is a DRAP register, rewrite the incoming location of parameters
-     passed on the stack into MEMs based on the argument pointer, as the DRAP
-     register can be reused for other purposes and we do not track locations
-     based on generic registers.  But the prerequisite is that this argument
-     pointer be also the virtual CFA pointer, see vt_initialize.  */
+  /* If there is a DRAP register or a pseudo in internal_arg_pointer,
+     rewrite the incoming location of parameters passed on the stack
+     into MEMs based on the argument pointer, so that incoming doesn't
+     depend on a pseudo.  */
   if (MEM_P (incoming)
-      && stack_realign_drap
-      && arg_pointer_rtx == cfa_base_rtx
       && (XEXP (incoming, 0) == crtl->args.internal_arg_pointer
          || (GET_CODE (XEXP (incoming, 0)) == PLUS
              && XEXP (XEXP (incoming, 0), 0)