diff mbox

Fix boot/50018

Message ID 4E43F1C8.6070809@redhat.com
State New
Headers show

Commit Message

Richard Henderson Aug. 11, 2011, 3:14 p.m. UTC
The reduced test case for m68k showed a TLS symbol
given to emit_single_push_insn, which resulted in
a call insn inside a sequence that I didn't expect.

We don't see this on i686 because we pretend that
the TLS call isn't a call.  Or something.

Bootstrapped on i586 for sanity.

Committed.


r~
PR bootstrap/50018
        * expr.c (fixup_args_size_notes): Accept and ignore normal calls.
diff mbox

Patch

diff --git a/gcc/expr.c b/gcc/expr.c
index f0b76e1..997eb3e 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3567,8 +3567,10 @@  fixup_args_size_notes (rtx prev, rtx last, int end_args_size)
       /* Look for a call_pop pattern.  */
       if (CALL_P (insn))
 	{
-	  /* We're not supposed to see non-pop call patterns here.  */
-	  gcc_assert (GET_CODE (pat) == PARALLEL);
+          /* We have to allow non-call_pop patterns for the case
+	     of emit_single_push_insn of a TLS address.  */
+	  if (GET_CODE (pat) != PARALLEL)
+	    continue;
 
 	  /* All call_pop have a stack pointer adjust in the parallel.
 	     The call itself is always first, and the stack adjust is
@@ -3583,7 +3585,8 @@  fixup_args_size_notes (rtx prev, rtx last, int end_args_size)
 		break;
 	    }
 	  /* We'd better have found the stack pointer adjust.  */
-	  gcc_assert (i > 0);
+	  if (i == 0)
+	    continue;
 	  /* Fall through to process the extracted SET and DEST
 	     as if it was a standalone insn.  */
 	}