[gcc r16-1474] libstdc++: Uglify __mapping_alike template parameter and fix test and typo in comment.
Tomasz Kaminski
tkaminsk@gcc.gnu.org
Thu Jun 12 09:58:48 GMT 2025
https://gcc.gnu.org/g:90f7bbfe2219770ac8b25d0f99320ed3a4fd7736
commit r16-1474-g90f7bbfe2219770ac8b25d0f99320ed3a4fd7736
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date: Thu Jun 5 10:40:10 2025 +0200
libstdc++: Uglify __mapping_alike template parameter and fix test and typo in comment.
When the static assert was generated from instantiations of default member
initializer of class B, the error was not generated for B<1, std::layout_left,
std::layout_left> case, only when -D_GLIBCXX_DEBUG was set. Changing B calls to
functions fixes that.
We also replace class with typename in template head of layout_right::mapping
constructors.
libstdc++-v3/ChangeLog:
* include/std/mdspan (__mdspan::__mapping_alike): Rename template
parameter from M to _M_p.
(layout_right::mapping): Replace class with typename in template
head.
(layout_stride::mapping): Fix typo in comment.
* testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc:
Changed B to function.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
Diff:
---
libstdc++-v3/include/std/mdspan | 22 +++++++++++-----------
.../mdspan/layouts/class_mandate_neg.cc | 18 ++++++++++--------
2 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan
index 4a3e863bed5f..6dc2441f80bd 100644
--- a/libstdc++-v3/include/std/mdspan
+++ b/libstdc++-v3/include/std/mdspan
@@ -691,7 +691,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: mapping(__other.extents(), __mdspan::__internal_ctor{})
{ }
- template<class _OExtents>
+ template<typename _OExtents>
requires (extents_type::rank() <= 1)
&& is_constructible_v<extents_type, _OExtents>
constexpr explicit(!is_convertible_v<_OExtents, extents_type>)
@@ -699,7 +699,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: mapping(__other.extents(), __mdspan::__internal_ctor{})
{ }
- template<class _OExtents>
+ template<typename _OExtents>
requires is_constructible_v<extents_type, _OExtents>
constexpr explicit(extents_type::rank() > 0)
mapping(const layout_stride::mapping<_OExtents>& __other) noexcept
@@ -780,16 +780,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
namespace __mdspan
{
- template<typename M>
+ template<typename _Mp>
concept __mapping_alike = requires
{
- requires __is_extents<typename M::extents_type>;
- { M::is_always_strided() } -> same_as<bool>;
- { M::is_always_exhaustive() } -> same_as<bool>;
- { M::is_always_unique() } -> same_as<bool>;
- bool_constant<M::is_always_strided()>::value;
- bool_constant<M::is_always_exhaustive()>::value;
- bool_constant<M::is_always_unique()>::value;
+ requires __is_extents<typename _Mp::extents_type>;
+ { _Mp::is_always_strided() } -> same_as<bool>;
+ { _Mp::is_always_exhaustive() } -> same_as<bool>;
+ { _Mp::is_always_unique() } -> same_as<bool>;
+ bool_constant<_Mp::is_always_strided()>::value;
+ bool_constant<_Mp::is_always_exhaustive()>::value;
+ bool_constant<_Mp::is_always_unique()>::value;
};
template<typename _Mapping>
@@ -847,7 +847,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
mapping() noexcept
{
// The precondition is either statically asserted, or automatically
- // satisfied because dynamic extents are zero-initialzied.
+ // satisfied because dynamic extents are zero-initialized.
size_t __stride = 1;
for (size_t __i = extents_type::rank(); __i > 0; --__i)
{
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
index 70a25707cb2a..7091153daba8 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
@@ -18,7 +18,8 @@ template<typename Layout>
};
template<size_t Count, typename Layout, typename OLayout>
- struct B
+ bool
+ B()
{
using Extents = std::extents<uint8_t, dyn, dyn, Count>;
using OExtents = std::extents<uint16_t, n, 4, Count>;
@@ -27,20 +28,21 @@ template<size_t Count, typename Layout, typename OLayout>
using OMapping = typename OLayout::mapping<OExtents>;
Mapping m{OMapping{}};
+ return true;
};
A<std::layout_left> a_left; // { dg-error "required from" }
A<std::layout_right> a_right; // { dg-error "required from" }
A<std::layout_stride> a_stride; // { dg-error "required from" }
-B<1, std::layout_left, std::layout_left> b0; // { dg-error "required here" }
-B<2, std::layout_left, std::layout_stride> b1; // { dg-error "required here" }
+auto b1 = B<1, std::layout_left, std::layout_left>(); // { dg-error "required from" }
+auto b2 = B<2, std::layout_left, std::layout_stride>(); // { dg-error "required from" }
-B<3, std::layout_right, std::layout_right> b2; // { dg-error "required here" }
-B<4, std::layout_right, std::layout_stride> b3; // { dg-error "required here" }
+auto b3 = B<3, std::layout_right, std::layout_right>(); // { dg-error "required from" }
+auto b4 = B<4, std::layout_right, std::layout_stride>(); // { dg-error "required from" }
-B<5, std::layout_stride, std::layout_right> b4; // { dg-error "required here" }
-B<6, std::layout_stride, std::layout_left> b5; // { dg-error "required here" }
-B<7, std::layout_stride, std::layout_stride> b6; // { dg-error "required here" }
+auto b5 = B<5, std::layout_stride, std::layout_right>(); // { dg-error "required from" }
+auto b6 = B<6, std::layout_stride, std::layout_left>(); // { dg-error "required from" }
+auto b7 = B<7, std::layout_stride, std::layout_stride>(); // { dg-error "required from" }
// { dg-prune-output "must be representable as index_type" }
More information about the Libstdc++-cvs
mailing list