---------- 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 -------------- 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 for instructions. make: *** [foo.o] Error 1 ----------- Source --------------- #include union { uint16_t word; uint8_t byte[3]; } bar; void foo (void) { 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).