https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114803
--- Comment #9 from Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> --- (In reply to Alexandre Oliva from comment #7) > FWIW, since the backport, this test started failing in gcc-13 on arm and > aarch64 targets. Presumably this affects earlier branches as well. > > .../libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc: In > instantiation of 'void maybe_test() [with T = char]': > .../libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc:87: > required from here > .../libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc:68: > error: invalid 'static_cast' from type 'V' {aka > 'std::experimental::parallelism_v2::simd<char, > std::experimental::parallelism_v2::simd_abi::_VecBuiltin<16> >'} to type > 'uint8x16_t' I tested on aarch64-linux-gnu and arm-linux-gnueabi before and after the backport and there were no regressions. What target do I need to add to my list? The specific error you report is rather puzzling. Basically an integral, sizeof 1, not signed char, when packed into a simd<char> is not explicitly convertible to uint8x16_t. The simd<char> is defined to be convertible to its underlying intrinsic type which is determined in libstdc++-v3/include/experimental/bits/simd.h and goes like this: 'char' has no full specialization for '__intrinsic_type<char, 16>' (unless 'char' is the *same* type as 'signed char' or 'unsigned char') and thus picks the partial specialization of __intrinsic_type. This in turn determines the corresponding signed integer type to be 'signed char'. Depending on whether 'is_unsigned_v<char>' is true, it subsequently applies 'make_unsigned_t'. It then uses the __intrinsic_type_t of that, which is either int8x16_t or uint8x16_t depending on 'is_unsigned_v<char>'. This