]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Fix simd<char> conversion for -fno-signed-char for Clang
authorMatthias Kretz <m.kretz@gsi.de>
Mon, 3 Jun 2024 10:02:07 +0000 (12:02 +0200)
committerMatthias Kretz <m.kretz@gsi.de>
Tue, 4 Jun 2024 08:21:22 +0000 (10:21 +0200)
commit8e36cf4c5c9140915d0019999db132a900b48037
tree60bd3240fb6ac273502aadf22287edba437d698d
parentd93353e6423ecaaae9fa47d0935caafd9abfe4de
libstdc++: Fix simd<char> conversion for -fno-signed-char for Clang

The special case for Clang in the trait producing a signed integer type
lead to the trait returning 'char' where it should have been 'signed
char'. This workaround was introduced because on Clang the return type
of vector compares was not convertible to '_SimdWrapper<
__int_for_sizeof_t<...' unless '__int_for_sizeof_t<char>' was an alias
for 'char'. In order to not rewrite the complete mask type code (there
is code scattered around the implementation assuming signed integers),
this needs to be 'signed char'; so the special case for Clang needs to
be removed.
The conversion issue is now solved in _SimdWrapper, which now
additionally allows conversion from vector types with compatible
integral type.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

PR libstdc++/115308
* include/experimental/bits/simd.h (__int_for_sizeof): Remove
special cases for __clang__.
(_SimdWrapper): Change constructor overload set to allow
conversion from vector types with integral conversions via bit
reinterpretation.
libstdc++-v3/include/experimental/bits/simd.h