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