On Mon, 22 Apr 2024 at 16:30, Matthias Kretz <m.kr...@gsi.de> wrote: > > Tested on x86_64-linux-gnu, powerpc64le-linux-gnu, aarch64-linux-gnu, arm- > linux-gnueabihf > > OK for trunk and backports?
OK, thanks > > ----------------------------- 8< --------------------------------- > > > Avoid > -Wnarrowing in C code; > -Wtautological-compare in unconditional static_assert (necessary for > faking a dependency on a template parameter) > > Signed-off-by: Matthias Kretz <m.kr...@gsi.de> > > libstdc++-v3/ChangeLog: > > * include/experimental/bits/simd.h: Ignore -Wnarrowing for > arm_neon.h. > (__int_for_sizeof): Replace tautological compare with checking > for invalid template parameter value. > * include/experimental/bits/simd_builtin.h (__extract_part): > Remove tautological compare by combining two static_assert. > --- > libstdc++-v3/include/experimental/bits/simd.h | 8 +++++++- > libstdc++-v3/include/experimental/bits/simd_builtin.h | 3 +-- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/libstdc++-v3/include/experimental/bits/simd.h b/libstdc++-v3/ > include/experimental/bits/simd.h > index 03c2e17a326..6ef9c955cfa 100644 > --- a/libstdc++-v3/include/experimental/bits/simd.h > +++ b/libstdc++-v3/include/experimental/bits/simd.h > @@ -44,7 +44,12 @@ > #if _GLIBCXX_SIMD_X86INTRIN > #include <x86intrin.h> > #elif _GLIBCXX_SIMD_HAVE_NEON > +#pragma GCC diagnostic push > +// narrowing conversion of '__a' from 'uint64_t' {aka 'long long unsigned > int'} to > +// 'int64x1_t' {aka 'long long int'} [-Wnarrowing] > +#pragma GCC diagnostic ignored "-Wnarrowing" > #include <arm_neon.h> > +#pragma GCC diagnostic pop > #endif > #if _GLIBCXX_SIMD_HAVE_SVE > #include <arm_sve.h> > @@ -598,6 +603,7 @@ struct __is_bitmask > constexpr auto > __int_for_sizeof() > { > + static_assert(_Bytes > 0); > if constexpr (_Bytes == sizeof(int)) > return int(); > #ifdef __clang__ > @@ -663,7 +669,7 @@ struct _Ip > return _Ip{}; > } > else > - static_assert(_Bytes != _Bytes, "this should be unreachable"); > + static_assert(_Bytes == 0, "this should be unreachable"); > } > #pragma GCC diagnostic pop > > diff --git a/libstdc++-v3/include/experimental/bits/simd_builtin.h b/libstdc+ > +-v3/include/experimental/bits/simd_builtin.h > index af0c4886108..49c7c7e1c70 100644 > --- a/libstdc++-v3/include/experimental/bits/simd_builtin.h > +++ b/libstdc++-v3/include/experimental/bits/simd_builtin.h > @@ -278,8 +278,7 @@ __extract_part(const _SimdWrapper<_Tp, _Np> __x) > __extract_part(const _SimdWrapper<bool, _Np> __x) > { > static_assert(_Combine == 1, "_Combine != 1 not implemented"); > - static_assert(__have_avx512f && _Np == _Np); > - static_assert(_Total >= 2 && _Index + _Combine <= _Total && _Index >= 0); > + static_assert(__have_avx512f && _Total >= 2 && _Index + _Combine <= > _Total && _Index >= 0); > return __x._M_data >> (_Index * _Np / _Total); > } > > -- > ────────────────────────────────────────────────────────────────────────── > Dr. Matthias Kretz https://mattkretz.github.io > GSI Helmholtz Centre for Heavy Ion Research https://gsi.de > stdₓ::simd > ────────────────────────────────────────────────────────────────────────── >