aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2012-07-06 11:37:36 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2012-07-06 11:37:36 +0000
commit2b9d5ad7df2f309a7835e7023d794afe492edfa2 (patch)
tree9fcc811f111eb60cad9a818816d0cece2a9ef7ab
parentfe8fb1c4c0c8793ffeb30cc470bfefcf4d13bfb4 (diff)
downloadgcc-2b9d5ad7df2f309a7835e7023d794afe492edfa2.zip
gcc-2b9d5ad7df2f309a7835e7023d794afe492edfa2.tar.gz
gcc-2b9d5ad7df2f309a7835e7023d794afe492edfa2.tar.bz2
re PR debug/53820 (ICE in vt_expand_var_loc_chain, at var-tracking.c:8029)
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/var-tracking.c11
2 files changed, 11 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f7a65b9..9ccc668 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 66ce35a..5288c28 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -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)