Created attachment 34947 [details] tar.gz containing files to reproduce To be honest the summary is probably wrong, not much of a compiler expert myself I have this code that when compiled with gcc 4.9.2 and -g fails but works with -O2 (also works with 4.8.2 whenever the flags used) Fails when printing: a.cpp a.cpp Works if printing: a.cpp b.cpp This is affecting Qt since this is reduced test case from Qt sources $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.9.2-10ubuntu7' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --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-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-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 4.9.2 (Ubuntu 4.9.2-10ubuntu7)
Works fine with $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.8/lto-wrapper Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --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-4.8-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
I cannot reproduce this. What linker are you using?
I guess i'm using the system default one, that would be $ `which ld` -V GNU ld (GNU Binutils for Ubuntu) 2.25 Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 i386linux elf_l1om elf_k1om i386pep i386pe I'm not the only one with this problem, doesn't seem to be Ubuntu specific either, see http://lists.qt-project.org/pipermail/development/2015-March/020632.html
Does it also happens with -fuse-ld=gold?
I can also reproduce this on Arch linux. Yes it still fails if I change the Makefile to set LINK = g++ -fuse-ld=gold However changing CXX = g++ -O2 makes it pass. $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: /build/gcc-multilib/src/gcc-4.9-20150204/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-multilib --disable-werror --enable-checking=release Thread model: posix gcc version 4.9.2 20150204 (prerelease) (GCC)
Same as ecloud, also fails if using gold.
Confirmed on 4.9 branch. I was using 4.9 release first. Bisecting.
gcc-4.9.2 $ nm gccbug | c++filt | grep operator 00000000004008ea W GlobalStatic<Bar, (anonymous namespace)::innerFunction()>::operator()() 00000000004008ea W GlobalStatic<Bar, (anonymous namespace)::innerFunction()>::operator()() gcc-4.8.4 $ nm gccbug | c++filt | grep operator 00000000004008cc t GlobalStatic<Bar, (anonymous namespace)::innerFunction()>::operator()() 00000000004009a4 t GlobalStatic<Bar, (anonymous namespace)::innerFunction()>::operator()() With 4.9.2 the address of both operator()() is the same
Started with r219305.
Confirmed also on trunk. P1 because of a regression on the branch that wasn't released yet.
The issue was fixed on trunk by r220991.
Fixed for 4.9.3.
Author: jason Date: Wed Mar 4 18:13:44 2015 New Revision: 221192 URL: https://gcc.gnu.org/viewcvs?rev=221192&root=gcc&view=rev Log: PR c++/65209 PR c++/65309 * decl2.c (constrain_visibility_for_template): Handle reference arguments. Added: branches/gcc-4_9-branch/gcc/testsuite/g++.dg/abi/anon4.C Modified: branches/gcc-4_9-branch/gcc/cp/ChangeLog branches/gcc-4_9-branch/gcc/cp/decl2.c