https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125445
Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2026-05-25
Ever confirmed|0 |1
Status|UNCONFIRMED |ASSIGNED
--- Comment #1 from Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> ---
untested patch:
@@ -1099,12 +1099,13 @@ _M_assoc_barrier() const
basic_vec() = default;
// [simd.overview] p2 impl-def conversions
------------------------------
- using _NativeVecType = decltype([] {
- if constexpr (_S_is_scalar)
- return __vec_builtin_type<__canon_value_type, 1>();
- else
- return _DataType();
- }());
+ /** @internal
+ * This is an alias for the corresponding GNU vector type
(`[[gnu::vector_size(Bytes)]]`).
+ * This type can be different to _DataType because it doesn't use the
canonical_vec_type_t and
+ * for size 1 it is a GNU vector type of size 1.
+ */
+ using _NativeVecType = __vec_builtin_type<value_type, _S_full_size>;
+
/**
* @brief Converting constructor from GCC vector builtins.
*
@@ -1142,7 +1143,7 @@ basic_vec(_NativeVecType __x)
if constexpr (_S_is_scalar)
return _NativeVecType{_M_data};
else
- return _M_data;
+ return reinterpret_cast<_NativeVecType>(_M_data);
}
#if _GLIBCXX_X86
@@ -1151,8 +1152,8 @@ basic_vec(_NativeVecType __x)
*/
template <__vec_builtin _IV>
requires same_as<__x86_intel_intrin_value_type<value_type>,
__vec_value_type<_IV>>
- && (sizeof(_IV) == sizeof(_DataType) && sizeof(_IV) >= 16
- && !is_same_v<_IV, _DataType>)
+ && (sizeof(_IV) == sizeof(_NativeVecType) && sizeof(_IV) >= 16
+ && !is_same_v<_IV, _NativeVecType>)
constexpr
basic_vec(_IV __x)
: _M_data(reinterpret_cast<_DataType>(__x))
@@ -1163,8 +1164,8 @@ basic_vec(_IV __x)
*/
template <__vec_builtin _IV>
requires same_as<__x86_intel_intrin_value_type<value_type>,
__vec_value_type<_IV>>
- && (sizeof(_IV) == sizeof(_DataType) && sizeof(_IV) >= 16
- && !is_same_v<_IV, _DataType>)
+ && (sizeof(_IV) == sizeof(_NativeVecType) && sizeof(_IV) >= 16
+ && !is_same_v<_IV, _NativeVecType>)
constexpr
operator _IV() const
{ return reinterpret_cast<_IV>(_M_data); }