diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2012-07-06 11:37:36 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2012-07-06 11:37:36 +0000 |
commit | 2b9d5ad7df2f309a7835e7023d794afe492edfa2 (patch) | |
tree | 9fcc811f111eb60cad9a818816d0cece2a9ef7ab | |
parent | fe8fb1c4c0c8793ffeb30cc470bfefcf4d13bfb4 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/var-tracking.c | 11 |
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) |