diff options
author | Richard Henderson <rth@redhat.com> | 2008-10-21 13:48:16 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2008-10-21 13:48:16 -0700 |
commit | 3d7e23f61d6aab5fce928df758ad6117ba38ab45 (patch) | |
tree | 052bfb82b1dc059871fa44b6f66ba8b9ead7deca /gcc/var-tracking.c | |
parent | 86b9515c41b13f0fca9d0e89dd495772a014d364 (diff) | |
download | gcc-3d7e23f61d6aab5fce928df758ad6117ba38ab45.zip gcc-3d7e23f61d6aab5fce928df758ad6117ba38ab45.tar.gz gcc-3d7e23f61d6aab5fce928df758ad6117ba38ab45.tar.bz2 |
re PR middle-end/37815 (ICE in vt_add_function_parameters (bootstrap error))
PR 37815
* emit-rtl.c (get_spill_slot_decl): Export.
* emit-rtl.h (get_spill_slot_decl): Declare.
* var-tracking.c (vt_add_function_parameters): Relax assertion
on the contents of MEM_EXPR in a PARM_DECL to include a spill slot.
From-SVN: r141278
Diffstat (limited to 'gcc/var-tracking.c')
-rw-r--r-- | gcc/var-tracking.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 2b92e40..1451278 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -3182,7 +3182,16 @@ vt_add_function_parameters (void) if (!decl) continue; - gcc_assert (parm == decl); + if (parm != decl) + { + /* Assume that DECL_RTL was a pseudo that got spilled to + memory. The spill slot sharing code will force the + memory to reference spill_slot_decl (%sfp), so we don't + match above. That's ok, the pseudo must have referenced + the entire parameter, so just reset OFFSET. */ + gcc_assert (decl == get_spill_slot_decl (false)); + offset = 0; + } if (!track_loc_p (incoming, parm, offset, false, &mode, &offset)) continue; |