---------- Compiler ---------------
Reading specs from C:/WinAVR/bin/../lib/gcc/avr/3.4.3/specs
Configured with: ../gcc-3.4.3/configure --prefix=m:/WinAVR --build=mingw32
--host=mingw32 --target=avr --enable-languages=c,c++ --with-dwarf2
Thread model: single
gcc version 3.4.3
---------- Error message --------------
avr-gcc -g -Wall -Os -mmcu=atmega16 -DARC -DLED_DDR=DDRB -DLED=PB4
-DLED_PORT=PORTB -DSW_DDR=DDRB -DSW_PORT=PORTB -DSW_PIN=PINB -DSW=PB6
-DF_CPU=16000000 -gdwarf-2 -mshort-calls   -c -o foo.o foo.c
foo.c: In function `foo':
foo.c:12: internal compiler error: in emit_move_insn, at expr.c:2809
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [foo.o] Error 1

----------- Source ---------------
#include <inttypes.h>

void foo (void)
{
        union
        {
                uint16_t word;
                uint8_t byte[3];        // <<< HERE IS THE BUG
        }
        
        bar;
        asm volatile (
        "\tnop\n"
        : :"r" (bar) );
}
------------ commentary --------------

I simplified the test case to the bare essentials.
The error occurs if the union is in SRAM or Registers, but
oddly enough, NOT if it is on the stack (put it there by
taking an address of the union...)  If the array "byte" is
made two long, then this doesn't occur.  If "word" is a long,
then "byte" needs to be 4 long (or it breaks).

Someone from the avr-gcc list tried this out on the x86 compiler and it failed
there as well (with the union in static ram rather than automatic) so it seems
more generic than just an avr-gcc bug.

-- 
           Summary: Union of odd byte array with integer causes asm
                    constraint to fail
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: larry at barello dot net
                CC: gcc-bugs at gcc dot gnu dot org


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

Reply via email to