re PR target/30848 (ICE with invalid constraint in asm statement)

PR target/30848
        * reg-stack.c (emit_swap_insn): If a malformed asm was seen,
        silently fix up the stack in the case of a missing register.

From-SVN: r122672
This commit is contained in:
Richard Henderson
2007-03-07 11:18:22 -08:00
parent 75d91c8598
commit ea2c0888e2
3 changed files with 28 additions and 6 deletions

View File

@@ -1,3 +1,9 @@
2007-03-07 Richard Henderson <rth@redhat.com>
PR target/30848
* reg-stack.c (emit_swap_insn): If a malformed asm was seen,
silently fix up the stack in the case of a missing register.
2007-03-06 David Daney <ddaney@avtrex.com>
* doc/install.texi (mips-*-*): Change recommended binutils
@@ -391,11 +397,11 @@
2007-01-29 Josh Conner <jconner@apple.com>
PR middle-end/29683
* calls.c (compute_argument_addresses): Set stack and stack_slot
for partial args, too.
(store_one_arg): Use locate.size.constant for the size when
generating a save_area.
PR middle-end/29683
* calls.c (compute_argument_addresses): Set stack and stack_slot
for partial args, too.
(store_one_arg): Use locate.size.constant for the size when
generating a save_area.
2007-01-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

View File

@@ -816,9 +816,19 @@ emit_swap_insn (rtx insn, stack regstack, rtx reg)
hard_regno = get_hard_regnum (regstack, reg);
gcc_assert (hard_regno >= FIRST_STACK_REG);
if (hard_regno == FIRST_STACK_REG)
return;
if (hard_regno == -1)
{
/* Something failed if the register wasn't on the stack. If we had
malformed asms, we zapped the instruction itself, but that didn't
produce the same pattern of register sets as before. To prevent
further failure, adjust REGSTACK to include REG at TOP. */
gcc_assert (any_malformed_asm);
regstack->reg[++regstack->top] = REGNO (reg);
return;
}
gcc_assert (hard_regno >= FIRST_STACK_REG);
other_reg = regstack->top - (hard_regno - FIRST_STACK_REG);

View File

@@ -0,0 +1,6 @@
/* { dg-do compile } */
void foo(double d)
{
__asm__ ("" : "=u" (d)); /* { dg-error "output regs" } */
}