http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58545

            Bug ID: 58545
           Summary: [4.7/4.8 Regression] error: unable to find a register
                    to spill in class 'POINTER_REGS'
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code, ra
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gjl at gcc dot gnu.org
            Blocks: 56183
            Target: avr

== C source ==

typedef unsigned char uint8_t;
typedef unsigned int uint16_t;

extern uint8_t f1 (const uint8_t*);
extern void f2 (uint8_t*, uint8_t);

void func (uint16_t parameter, uint8_t *addr, uint8_t data)
{
   uint8_t status;

   status = f1 (addr + 8);

   addr++;

   if (*addr == parameter + 8)
      *addr = parameter;

   f2 (addr, data);
   f2 (addr + 8, status + 1);
}

== Command line ==

$ avr-gcc bug.c -S -Os -mmcu=atmega8
bug.c: In function 'func':
bug.c:20:1: error: unable to find a register to spill in class 'POINTER_REGS'
 }
 ^
bug.c:20:1: error: this is the insn:
(insn 37 15 16 2 (set (reg:QI 20 r20)
        (mem/c:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 1 [0x1])) [3 S1 A8])) bug.c:15 70 {movqi_insn}
     (nil))
bug.c:20:1: internal compiler error: in spill_failure, at reload1.c:2123

bug.c:20:1: internal compiler error: Segmentation fault

== configure == 

Configured with: ../../gcc.gnu.org/trunk/configure --target=avr
--prefix=/local/gnu/install/gcc-4.8-mingw32 --host=i386-mingw32
--build=i686-linux-gnu --enable-languages=c,c++ --disable-nls --disable-shared
--with-dwarf2

== Notes ==

The compile passes with -fno-caller-saves

Reply via email to