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>(); }
>       |                            ~~~~~~~~~~~~~~~~~~^~

Reply via email to