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 > >> > >