[PATCH v2] libstdc++: Improve and cleanup mdspan related code.
Tomasz Kaminski
tkaminsk@redhat.com
Wed Oct 8 08:42:36 GMT 2025
On Wed, Oct 8, 2025 at 10:37 AM Jonathan Wakely <jwakely@redhat.com> wrote:
> On Fri, 03 Oct 2025 at 12:48 +0200, Tomasz Kamiński wrote:
> >From: Luc Grosheintz <luc.grosheintz@gmail.com>
> >
> >The improvement is that in __index_type_cast, we don't need to check at
> >runtime if we know that _IndexType is smaller than _OIndexType.
> >
> >The cleanup is whitespace (overlength lines) in <mdspan> and
> >de-uglifying a variable in test code.
> >
> >libstdc++-v3/ChangeLog:
> >
> > * include/std/mdspan (__mdspan::__index_type_cast): Optimize by
> > skipping a __glibcxx_assert if it's know at compile-time.
> > * testsuite/23_containers/mdspan/int_like.h: Rename _M_i to
> > value.
> >
> >Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
> >Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
> >---
> >v2 revers few whitespace changes.
> >
> > libstdc++-v3/include/std/mdspan | 16 +++++++++++-----
> > .../testsuite/23_containers/mdspan/int_like.h | 12 ++++++------
> > 2 files changed, 17 insertions(+), 11 deletions(-)
> >
> >diff --git a/libstdc++-v3/include/std/mdspan
> b/libstdc++-v3/include/std/mdspan
> >index ce7e4178f67..469d4c3cb6c 100644
> >--- a/libstdc++-v3/include/std/mdspan
> >+++ b/libstdc++-v3/include/std/mdspan
> >@@ -77,11 +77,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> > {
> > if constexpr (std::is_integral_v<_OIndexType>)
> > {
> >- __glibcxx_assert(cmp_less_equal(__other,
> >- __gnu_cxx::__int_traits<_IndexType>::__max));
> >+ constexpr _IndexType __index_type_max
> >+ = __gnu_cxx::__int_traits<_IndexType>::__max;
> >+ constexpr _OIndexType __oindex_type_max
> >+ = __gnu_cxx::__int_traits<_OIndexType>::__max;
> >+
> >+ if constexpr (__index_type_max < __oindex_type_max)
> >+ __glibcxx_assert(cmp_less_equal(__other, __index_type_max));
> >+
> > if constexpr (std::is_signed_v<_OIndexType>)
> >- __glibcxx_assert(__other >= 0);
> >- return std::move(__other);
> >+ __glibcxx_assert(__other >= 0);
> >+ return static_cast<_IndexType>(std::move(__other));
>
> Do we need the std::move here, if we know that __other has an integral
> type?
>
Good catch. The `std::move` was applied out of habit here. I will change
that before
submitting.
>
>
>
> > }
> > else
> > {
> >@@ -981,7 +987,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> > template<class _RightPaddedMapping>
> > requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping>
> > && is_constructible_v<extents_type,
> >- typename
> _RightPaddedMapping::extents_type>
> >+ typename _RightPaddedMapping::extents_type>
> > constexpr
> > explicit(!is_convertible_v<typename
> _RightPaddedMapping::extents_type,
> > extents_type>)
> >diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
> b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
> >index 310dd8ddf20..e9172c13455 100644
> >--- a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
> >+++ b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
> >@@ -15,7 +15,7 @@ template<CustomIndexKind Kind>
> > public:
> > explicit
> > CustomIndexType(int i)
> >- : _M_i(i)
> >+ : value(i)
> > { }
> >
> > CustomIndexType() = delete;
> >@@ -31,25 +31,25 @@ template<CustomIndexKind Kind>
> > constexpr
> > operator int() const noexcept
> > requires (Kind == CustomIndexKind::Const)
> >- { return _M_i; }
> >+ { return value; }
> >
> > constexpr
> > operator int() const
> > requires (Kind == CustomIndexKind::Throwing)
> >- { return _M_i; }
> >+ { return value; }
> >
> > constexpr
> > operator int() noexcept
> > requires (Kind == CustomIndexKind::Mutating)
> >- { return _M_i; }
> >+ { return value; }
> >
> > constexpr
> > operator int() && noexcept
> > requires (Kind == CustomIndexKind::RValue)
> >- { return _M_i; }
> >+ { return value; }
> >
> > private:
> >- int _M_i;
> >+ int value;
> > };
> >
> > using IntLike = CustomIndexType<CustomIndexKind::Const>;
> >--
> >2.51.0
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20251008/8e937761/attachment.htm>
More information about the Libstdc++
mailing list