Code: template <class> void tf() { extern void (*qt_memfill32)(); qt_memfill32(); } void f() { tf<int>(); } When compiled with GCC 5.0, the object file has a reference to "_Z12qt_memfill32", which doesn't seem to me to be a valid C++ mangled name. At the very least, it's an ABI compatibility break with previous versions of GCC, other compilers and with itself. This symbol is defined in another .o as "qt_memfill32", even when compiled with GCC 5.0. Tests: gcc-5.0 -O2 -S -o - test.cpp: jmp *_Z12qt_memfill32(%rip) gcc-4.9 -O2 -S -o - test.cpp: movq qt_memfill32(%rip), %rax jmp *%rax clang-3.6 -O2 -S -o - test.cpp: jmpq *qt_memfill32(%rip) # TAILCALL icpc -O2 -S -o - test.cpp: movq qt_memfill32(%rip), %rax jmp *%rax
it was just fixed yesterday, see bug 64898. Please check the latest GCC before filing a bug especially during stage 4. *** This bug has been marked as a duplicate of bug 64898 ***
(In reply to Andrew Pinski from comment #1) > it was just fixed yesterday, see bug 64898. Please check the latest GCC > before filing a bug especially during stage 4. > > *** This bug has been marked as a duplicate of bug 64898 *** Sorry, I did rebuild two days ago when this started showing up. I must have missed the fix by a few hours, more or less (again).