https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82663
Bug ID: 82663 Summary: optimizer duplicates assembly jump label (when -std=c++11 and -O3) Product: gcc Version: 5.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lappisstudent at hotmail dot com Target Milestone: --- Created attachment 42436 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42436&action=edit Preprocessed source Assembly blocks such as the one below are duplicated by the optimizer in certain situations (loop unrolling?), which makes it impossible for the assembler to compile the program (duplicated jump labels at multiple positions). If I don't use the -std=c++11 flag, there are no problem regardless of the optimization settings I've tried. __asm__ __volatile__("i_want_to_let_a_macro_add_a_few_things_here_including_this_label:\n\t"); __asm__ __volatile__("cpuid\n\t" : "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "0" (0)); g++ version: g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.5' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) the complete command line that triggers the bug: g++ main.cpp -std=c++11 -O3 -save-temps -c -o delme the compiler output (error messages, warnings, etc.): main.cpp: Assembler messages: main.cpp:58: Error: symbol `i_want_to_let_a_macro_add_a_few_things_here_including_this_label' is already defined