mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
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:
@@ -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>
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
6
gcc/testsuite/gcc.target/i386/pr30848.c
Normal file
6
gcc/testsuite/gcc.target/i386/pr30848.c
Normal file
@@ -0,0 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
void foo(double d)
|
||||
{
|
||||
__asm__ ("" : "=u" (d)); /* { dg-error "output regs" } */
|
||||
}
|
||||
Reference in New Issue
Block a user