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

Reply via email to