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

           Summary: Internal compiler error in AVR code
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: gand...@winds.org
                CC: eric.wedding...@atmel.com
              Host: x86_64-unknown-linux-gnu
            Target: avr-unknown-none
             Build: x86_64-unknown-linux-gnu


Compiling the following function triggers an internal compiler error in (at
least) GCC versions 4.2, 4.3, 4.5 and the latest 4.7.0-20110620:

unsigned int test(unsigned int *ptr, unsigned int len)
{
  unsigned int sum=0, *p=ptr;

  while(p < ptr+len)
    sum += ({ unsigned int _x=(*p++); (_x << 8) | (_x >> 8); });

  if(__builtin_expect(len & 1, 0))
    sum += *p;

  return ~sum;
}

Compiler command and resulting output:

avr-gcc -O3 -Wall -mmcu=atmega644   -c -o test3.o test3.c
test3.c: In function 'test':
test3.c:12:1: error: could not split insn
(insn 40 38 41 (parallel [
            (set (reg:HI 20 r20 [92])
                (rotate:HI (reg/v:HI 20 r20 [orig:67 _x ] [67])
                    (const_int 8 [0x8])))
            (clobber (mem/c:QI (plus:HI (reg/f:HI 28 r28)
                        (const_int 1 [0x1])) [4 %sfp+1 S1 A8]))
        ]) test3.c:6 64 {*rotbhi}
     (nil))
test3.c:12:1: internal compiler error: in final_scan_insn, at final.c:2724

This was compiled using a cross-compiler on an x86_64 system as outlined below:

Target: avr
Configured with: ../configure --target=avr --prefix=/usr/local/avr
--disable-nls --enable-languages=c --disable-bootstrap --disable-libssp
Thread model: single
gcc version 4.7.0 20110620 (experimental) (GCC)

Reply via email to