diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-06-14 05:57:26 +0000 |
---|---|---|
committer | Roger Sayle <roger@eyesopen.com> | 2005-06-14 05:57:26 +0000 |
commit | 046405b7944b1d32aa46263c5ab30b68b536d87a (patch) | |
tree | 4e2a3aedbd40e21bd136b4bf24914c6fa0844132 /gcc/reg-stack.c | |
parent | d23a5eb6113a76a8fb883535d953739123842a08 (diff) |
PR rtl-optimization/22053
* reg-stack.c (compensate_edge): Correct mistake in the assertion
checking of EDGE_ABNORMAL_CALL edges; complex return values can
result in the top two stack slots, st(0) and st(1), being live.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@100926 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 7007fcb2bd6..7ee3be2d010 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -2667,8 +2667,9 @@ compensate_edge (edge e, FILE *file) { /* Assert that the lifetimes are as we expect -- one value live at st(0) on the end of the source block, and no - values live at the beginning of the destination block. */ - gcc_assert (source_stack->top == 0); + values live at the beginning of the destination block. + For complex return values, we may have st(1) live as well. */ + gcc_assert (source_stack->top == 0 || source_stack->top == 1); gcc_assert (target_stack->top == -1); return false; } |