I have an example in which it looks like code is reordered improperly. The bug seems to be triggered by using an enumerated type in a bitfield. I found the bug compiling for arm-elf, but I have reports that it fails in a similar way compiling for x86 (Linux).
Here's the compile command I used and its output: $ g++ -save-temps -v -march=armv5te -fpic -g -O2 -S shorty.cpp Reading specs from /usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/specs Configured with: ../gcc-3.4.5/configure --prefix=/usr/local/armdev-051213 --target=arm-elf --enable-languages=c,c++ --enable-threads --disable-nls --enable-multilib --with-float=soft --without-fp Thread model: single gcc version 3.4.5 /usr/local/armdev-051213/libexec/gcc/arm-elf/3.4.5/cc1plus -E -quiet -v -iprefix /usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/ -D__ARM_ARCH_5TE__ -D__USES_INITFINI__ shorty.cpp -march=armv5te -msoft-float -fpic -fworking-directory -O2 -o shorty.ii ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5" ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5/arm-elf" ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5/backward" ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/include" ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/../../../../arm-elf/sys-include" ignoring nonexistent directory "/usr/local/armdev-051213/arm-elf/bin/../lib/gcc/arm-elf/3.4.5/../../../../arm-elf/include" ignoring nonexistent directory "/usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5" ignoring nonexistent directory "/usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5/arm-elf" ignoring nonexistent directory "/usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/../../../../include/c++/3.4.5/backward" ignoring nonexistent directory "/usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/../../../../arm-elf/sys-include" ignoring nonexistent directory "/usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/../../../../arm-elf/include" #include "..." search starts here: #include <...> search starts here: /usr/local/armdev-051213/lib/gcc/arm-elf/3.4.5/include End of search list. /usr/local/armdev-051213/libexec/gcc/arm-elf/3.4.5/cc1plus -fpreprocessed shorty.ii -quiet -dumpbase shorty.cpp -march=armv5te -msoft-float -auxbase shorty -g -O2 -version -fpic -o shorty.s GNU C++ version 3.4.5 (arm-elf) compiled by GNU C version 4.0.1 (Apple Computer, Inc. build 5247). GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 -- Summary: Bad code reordering when using an enum as a bitfield Product: gcc Version: 3.4.5 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: danfuzz at milk dot com GCC target triplet: arm-elf http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27241