http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56665
Bug #: 56665 Summary: -O2 with -fno-strict-aliasing makes boost::spirit::classic::assign_a not working Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: bodzio...@op.pl Hi, I have problem using gcc4.7.2 with -fno-strict-aliasing switch along with -O2. This combination makes boost::spirit::classic::assign_a (boost1.48) not working properly. In undermentioned example value 101101 is not assigned to 'variable'. It worked fine with gcc3.4.3, and it works ok with gcc4.7.2 -O2 without -fno-strict-aliasing. //---------- start ------------ #include <boost/spirit/include/classic.hpp> #include <boost/spirit/include/phoenix1.hpp> #include <stdio.h> int main() { int variable = 123; using namespace boost::spirit::classic; using namespace phoenix; rule<> testRule // = eps_p [ var( variable ) = 101101 ] //that one works fine with -O2 -fno-strict-aliasing = eps_p [ assign_a( variable, 101101 ) ] //this one gives rubbish with -O2 -fno-strict-aliasing ; parse_info<> result = parse( "bla bla", testRule ); if ( result.hit ) printf( "%d\n", variable ); return 0; } //---------- end ------------ gcc details: COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../gcc-4.7.2/configure --prefix=/usr/local/gcc-4.7.2 --enable-languages=c,c++ --with-gmp=/usr/local/gcc-4.7.2 --with-ppl=/usr/local/gcc-4.7.2 --with-cloog=/usr/local/gcc-4.7.2 Thread model: posix gcc version 4.7.2 (GCC) Whole comilation log (g++ -v -save-temps -O2 -fno-strict-aliasing -pthread -I/usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include -L/usr/local/gcc-4.7.2/STLport-5.2.1/lib main.cpp -o test): Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../gcc-4.7.2/configure --prefix=/usr/local/gcc-4.7.2 --enable-languages=c,c++ --with-gmp=/usr/local/gcc-4.7.2 --with-ppl=/usr/local/gcc-4.7.2 --with-cloog=/usr/local/gcc-4.7.2 Thread model: posix gcc version 4.7.2 (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-fno-strict-aliasing' '-pthread' '-I' '/usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include' '-L/usr/local/gcc-4.7.2/STLport-5.2.1/lib' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro' /home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/cc1plus -E -quiet -v -I /usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include -iprefix /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/ -D_GNU_SOURCE -D_REENTRANT main.cpp -mtune=generic -march=pentiumpro -fno-strict-aliasing -O2 -fpch-preprocess -o main.ii ignoring nonexistent directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/include" ignoring duplicate directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2" ignoring duplicate directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/i686-pc-linux-gnu" ignoring duplicate directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/backward" ignoring duplicate directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/include" ignoring duplicate directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/include-fixed" ignoring nonexistent directory "/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2 /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/i686-pc-linux-gnu /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/backward /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/include /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/include-fixed /usr/local/include /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/../../include /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-fno-strict-aliasing' '-pthread' '-I' '/usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include' '-L/usr/local/gcc-4.7.2/STLport-5.2.1/lib' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro' /home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/cc1plus -fpreprocessed main.ii -quiet -dumpbase main.cpp -mtune=generic -march=pentiumpro -auxbase main -O2 -version -fno-strict-aliasing -o main.s GNU C++ (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 4.3.2, MPFR version 2.4.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C++ (GCC) version 4.7.2 (i686-pc-linux-gnu) compiled by GNU C version 4.7.2, GMP version 4.3.2, MPFR version 2.4.2, MPC version 1.0.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 18f6eb2e590887d903a9b1835552c140 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-fno-strict-aliasing' '-pthread' '-I' '/usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include' '-L/usr/local/gcc-4.7.2/STLport-5.2.1/lib' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro' /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/bin/as -v -I /usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include --32 -o main.o main.s GNU assembler version 2.21.1 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.21.1 COMPILER_PATH=/home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/:/home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/:/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/bin/ LIBRARY_PATH=/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/:/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/:/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/lib/:/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-fno-strict-aliasing' '-pthread' '-I' '/usr/local/gcc-4.7.2/STLport-5.2.1/boost-1.48/include' '-L/usr/local/gcc-4.7.2/STLport-5.2.1/lib' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro' /home/build/storage/toolchain/gcc-4.7.2/bin/../libexec/gcc/i686-pc-linux-gnu/4.7.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/crtbegin.o -L/usr/local/gcc-4.7.2/STLport-5.2.1/lib -L/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2 -L/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc -L/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/lib -L/home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/../../.. main.o -lstdc++ -lm -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /home/build/storage/toolchain/gcc-4.7.2/bin/../lib/gcc/i686-pc-linux-gnu/4.7.2/crtend.o /usr/lib/crtn.o