The attached (simple) piece of code segfaults if compiled with (>=)-O2. There are several possibilities to trigger the error. 1. Using the attached cpp, compile with -O2 ends in segfault when running the app (-O{0,1} is fine) 2. If the cout in the last line is removed, everything seems to be fine 3. If line 16 is exchanged with line 15, everything is fine, too. (tested on gentoo and SuSE)
Output of "g++ -v -save-temps -O2 compilerbugCPP.cpp -o compilerbug": Using built-in specs. Target: i586-suse-linux Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.1.0 --enable-ssp --disable-libssp --enable-java-awt=gtk --enable-gtk-cairo --disable-libjava-multilib --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --without-system-libunwind --with-cpu=generic --host=i586-suse-linux Thread model: posix gcc version 4.1.0 (SUSE Linux) /usr/lib/gcc/i586-suse-linux/4.1.0/cc1plus -E -quiet -v -D_GNU_SOURCE compilerbugCPP.cpp -mtune=generic -O2 -fpch-preprocess -o compilerbugCPP.ii #include "..." search starts here: #include <...> search starts here: /usr/include/c++/4.1.0 /usr/include/c++/4.1.0/i586-suse-linux /usr/include/c++/4.1.0/backward /usr/local/include /usr/lib/gcc/i586-suse-linux/4.1.0/include /usr/lib/gcc/i586-suse-linux/4.1.0/../../../../i586-suse-linux/include /usr/include End of search list. /usr/lib/gcc/i586-suse-linux/4.1.0/cc1plus -fpreprocessed compilerbugCPP.ii -quiet -dumpbase compilerbugCPP.cpp -mtune=generic -auxbase compilerbugCPP -O2 -version -o compilerbugCPP.s GNU C++ version 4.1.0 (SUSE Linux) (i586-suse-linux) compiled by GNU C version 4.1.0 (SUSE Linux). GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=129317 Compiler executable checksum: c877835e2478fb620b785c23d7318e1f /usr/lib/gcc/i586-suse-linux/4.1.0/../../../../i586-suse-linux/bin/as -V -Qy -o compilerbugCPP.o compilerbugCPP.s GNU assembler version 2.16.91.0.5 (i586-suse-linux) using BFD version 2.16.91.0.5 20051219 (SUSE Linux) /usr/lib/gcc/i586-suse-linux/4.1.0/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o compilerbug /usr/lib/gcc/i586-suse-linux/4.1.0/../../../crt1.o /usr/lib/gcc/i586-suse-linux/4.1.0/../../../crti.o /usr/lib/gcc/i586-suse-linux/4.1.0/crtbegin.o -L/usr/lib/gcc/i586-suse-linux/4.1.0 -L/usr/lib/gcc/i586-suse-linux/4.1.0 -L/usr/lib/gcc/i586-suse-linux/4.1.0/../../../../i586-suse-linux/lib -L/usr/lib/gcc/i586-suse-linux/4.1.0/../../.. compilerbugCPP.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i586-suse-linux/4.1.0/crtend.o /usr/lib/gcc/i586-suse-linux/4.1.0/../../../crtn.o -- Summary: optimizer produces faulty code Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: S dot Diederich at gmx dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27795