re PR rtl-optimization/22053 (ACATS ICE cxg2002 cxg2008 cxg2019 cxg2020 cxg2021 compe...
authorRoger Sayle <roger@eyesopen.com>
Tue, 14 Jun 2005 05:57:26 +0000 (05:57 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Tue, 14 Jun 2005 05:57:26 +0000 (05:57 +0000)
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.

From-SVN: r100926

gcc/ChangeLog
gcc/reg-stack.c

index ee9433529e120330477ff8701991fa22a0ae0bdd..5e2d4deb31d5dbdfc187762575a302afa3df1d03 100644 (file)
@@ -1,3 +1,10 @@
+2005-06-13  Roger Sayle  <roger@eyesopen.com>
+
+       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.
+
 2005-06-13  Jeff Law  <law@redhat.com>
 
        * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): No longer
index 7007fcb2bd6034a8d85b36b3698f8cedc9834b25..7ee3be2d0106d4f3e8b6f4f26b25b3ac24224df9 100644 (file)
@@ -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;
     }