https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118546
Bug ID: 118546
Summary: std::experimental::simd operator== fails to compile
with clang++ 19.1.0 on x86-64-v4
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: lee.imple at gmail dot com
Target Milestone: ---
The following code fails to compile with clang++ 19.1.0 with the compilation
options `-march=x86-64-v4 -std=c++20`. Online link:
https://godbolt.org/z/sxqsKrv9e .
```c++
#include <experimental/simd>
#include <cstdint>
using deduce_t_element = std::experimental::simd<
std::uint64_t,
std::experimental::simd_abi::deduce_t<std::uint64_t, 4>
>;
auto f(deduce_t_element e) {
return e == 0;
}
```
The error message (copied from godbolt):
```
In file included from <source>:1:
In file included from
/opt/compiler-explorer/gcc-14.2.0/lib/gcc/x86_64-linux-gnu/14.2.0/../../../../include/c++/14.2.0/experimental/simd:80:
/opt/compiler-explorer/gcc-14.2.0/lib/gcc/x86_64-linux-gnu/14.2.0/../../../../include/c++/14.2.0/experimental/bits/simd_x86.h:4232:18:
error: static assertion failed due to requirement 'is_same_v<long long, long>'
4232 | static_assert(is_same_v<_Tp, __int_for_sizeof_t<_Tp>>);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-14.2.0/lib/gcc/x86_64-linux-gnu/14.2.0/../../../../include/c++/14.2.0/experimental/bits/simd_x86.h:2244:26:
note: in instantiation of function template specialization
'std::experimental::_MaskImplX86Mixin::_S_to_bits<long long, 4UL>' requested
here
2244 | return _MaskImpl::_S_to_bits(
| ^
/opt/compiler-explorer/gcc-14.2.0/lib/gcc/x86_64-linux-gnu/14.2.0/../../../../include/c++/14.2.0/experimental/bits/simd.h:5625:40:
note: in instantiation of function template specialization
'std::experimental::_SimdImplX86<std::experimental::simd_abi::_VecBltnBtmsk<32>>::_S_equal_to<unsigned
long, 4UL>' requested here
5625 | { return simd::_S_make_mask(_Impl::_S_equal_to(__x._M_data,
__y._M_data)); }
| ^
<source>:10:14: note: in instantiation of member function
'std::experimental::operator==' requested here
10 | return e == 0;
| ^
1 error generated.
Compiler returned: 1
```