On Tue, May 27, 2025 at 10:53 AM Jonathan Wakely <jwakely....@gmail.com>
wrote:

> On Mon, 26 May 2025 at 08:49, Tomasz Kaminski <tkami...@redhat.com> wrote:
> >
> >
> >
> > On Sat, May 24, 2025 at 1:29 PM Luc Grosheintz <luc.groshei...@gmail.com>
> wrote:
> >>
> >> The array that stores the dynamic extents used to be default
> >> initialized. The standard requires value intialization. This
> >> commit fixes the bug and adds a test.
> >>
> >> libstdc++-v3/ChangeLog:
> >>
> >>         * include/std/mdspan: Value initialize the array storing the
> >>         dynamic extents.
> >>         * testsuite/23_containers/mdspan/extents/ctor_default.cc: New
> >>         test.
> >>
> >> Signed-off-by: Luc Grosheintz <luc.groshei...@gmail.com>
> >> ---
> >
> > LGTM, thanks for noticing and fixing it.
> >  We also need approval from the maintainer.
>
> OK for trunk.
>
Pushed to trunk as r16-891-ge46c5b3219436d.

>
> >>
> >>  libstdc++-v3/include/std/mdspan               |  2 +-
> >>  .../mdspan/extents/ctor_default.cc            | 41 +++++++++++++++++++
> >>  2 files changed, 42 insertions(+), 1 deletion(-)
> >>  create mode 100644
> libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
> >>
> >> diff --git a/libstdc++-v3/include/std/mdspan
> b/libstdc++-v3/include/std/mdspan
> >> index 47cfa405e44..bcf2fa60fea 100644
> >> --- a/libstdc++-v3/include/std/mdspan
> >> +++ b/libstdc++-v3/include/std/mdspan
> >> @@ -146,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> >>
> >>        private:
> >>         using _S_storage = __array_traits<_IndexType,
> _S_rank_dynamic>::_Type;
> >> -       [[no_unique_address]] _S_storage _M_dynamic_extents;
> >> +       [[no_unique_address]] _S_storage _M_dynamic_extents{};
> >
> > We know that these are integral types, so we can use {}.
> >>
> >>        };
> >>
> >>      template<typename _OIndexType, typename _SIndexType>
> >> diff --git
> a/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
> b/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
> >> new file mode 100644
> >> index 00000000000..eec300f6896
> >> --- /dev/null
> >> +++
> b/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
> >> @@ -0,0 +1,41 @@
> >> +// { dg-do run { target c++23 } }
> >> +#include <mdspan>
> >> +
> >> +#include <cstdint>
> >> +#include <testsuite_hooks.h>
> >> +
> >> +constexpr auto dyn = std::dynamic_extent;
> >> +
> >> +template<typename Extents>
> >> +  constexpr void
> >> +  test_default_ctor()
> >> +  {
> >> +    Extents exts;
> >> +    for(size_t i = 0; i < Extents::rank(); ++i)
> >> +      if(exts.static_extent(i) == std::dynamic_extent)
> >> +       VERIFY(exts.extent(i) == 0);
> >> +      else
> >> +       VERIFY(exts.extent(i) == Extents::static_extent(i));
> >> +  }
> >> +
> >> +constexpr bool
> >> +test_default_ctor_all()
> >> +{
> >> +  test_default_ctor<std::extents<int, 1>>();
> >> +  test_default_ctor<std::extents<int, dyn>>();
> >> +  test_default_ctor<std::extents<int, 1, 2>>();
> >> +  test_default_ctor<std::extents<int, dyn, 2>>();
> >> +  test_default_ctor<std::extents<int, dyn, dyn>>();
> >> +  test_default_ctor<std::extents<int, 1, 2, 3>>();
> >> +  test_default_ctor<std::extents<int, dyn, 2, dyn>>();
> >> +  test_default_ctor<std::extents<int, dyn, dyn, dyn>>();
> >> +  return true;
> >> +}
> >> +
> >> +int
> >> +main()
> >> +{
> >> +  test_default_ctor_all();
> >> +  static_assert(test_default_ctor_all());
> >> +  return 0;
> >> +}
> >> --
> >> 2.49.0
> >>
>
>

Reply via email to