https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115403
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Sergei Trofimovich from comment #2) > `cvise` came up with this example: > > //$ cat float_test.cc.cc > template <typename> __attribute__((always_inline)) inline void > AssertEqual() {} > void TestAllF16FromF32() { AssertEqual<float>(); } > #pragma GCC target "sse4.1" I think it's valid. Looks like the C++ FE picks a wrong point of instantiation for AssertEqual()? > Looks valid? > > gcc-14 can handle it, gcc-15 can't: > > $ g++-14 -O2 -std=c++17 -c float_test.cc.cc > > $ g++-15 -O2 -std=c++17 -c float_test.cc.cc > float_test.cc.cc: In function 'void TestAllF16FromF32()': > float_test.cc.cc:1:64: error: inlining failed in call to 'always_inline' > 'void AssertEqual() [with <template-parameter-1-1> = float]': target > specific option mismatch > 1 | template <typename> __attribute__((always_inline)) inline void > AssertEqual() {} > | > ^~~~~~~~~~~ > float_test.cc.cc:2:46: note: called from here > 2 | void TestAllF16FromF32() { AssertEqual<float>(); } > | ~~~~~~~~~~~~~~~~~~^~