On Wed, 30 Apr 2025 at 10:34, Luc Grosheintz <luc.groshei...@gmail.com> wrote: > > > > On 4/29/25 3:11 PM, Jonathan Wakely wrote: > > On Tue, 29 Apr 2025 at 13:59, Luc Grosheintz <luc.groshei...@gmail.com> > > wrote: > >> > >> Creates a nearly empty header mdspan and adds it to the build-system and > >> Doxygen config file. > >> > >> libstdc++-v3/ChangeLog: > >> > >> * doc/doxygen/user.cfg.in: Add <mdspan>. > >> * include/Makefile.am: Ditto. > >> * include/Makefile.in: Ditto. > >> * include/precompiled/stdc++.h: Ditto. > >> * include/std/mdspan: New file. > >> > >> Signed-off-by: Luc Grosheintz <luc.groshei...@gmail.com> > >> --- > >> libstdc++-v3/doc/doxygen/user.cfg.in | 1 + > >> libstdc++-v3/include/Makefile.am | 1 + > >> libstdc++-v3/include/Makefile.in | 1 + > >> libstdc++-v3/include/precompiled/stdc++.h | 1 + > >> libstdc++-v3/include/std/mdspan | 48 +++++++++++++++++++++++ > >> 5 files changed, 52 insertions(+) > >> create mode 100644 libstdc++-v3/include/std/mdspan > >> > >> diff --git a/libstdc++-v3/doc/doxygen/user.cfg.in > >> b/libstdc++-v3/doc/doxygen/user.cfg.in > >> index 19ae67a67ba..e926c6707f6 100644 > >> --- a/libstdc++-v3/doc/doxygen/user.cfg.in > >> +++ b/libstdc++-v3/doc/doxygen/user.cfg.in > >> @@ -880,6 +880,7 @@ INPUT = > >> @srcdir@/doc/doxygen/doxygroups.cc \ > >> include/list \ > >> include/locale \ > >> include/map \ > >> + include/mdspan \ > >> include/memory \ > >> include/memory_resource \ > >> include/mutex \ > >> diff --git a/libstdc++-v3/include/Makefile.am > >> b/libstdc++-v3/include/Makefile.am > >> index 537774c2668..1140fa0dffd 100644 > >> --- a/libstdc++-v3/include/Makefile.am > >> +++ b/libstdc++-v3/include/Makefile.am > >> @@ -38,6 +38,7 @@ std_freestanding = \ > >> ${std_srcdir}/generator \ > >> ${std_srcdir}/iterator \ > >> ${std_srcdir}/limits \ > >> + ${std_srcdir}/mdspan \ > >> ${std_srcdir}/memory \ > >> ${std_srcdir}/numbers \ > >> ${std_srcdir}/numeric \ > >> diff --git a/libstdc++-v3/include/Makefile.in > >> b/libstdc++-v3/include/Makefile.in > >> index 7b96b2207f8..c96e981acd6 100644 > >> --- a/libstdc++-v3/include/Makefile.in > >> +++ b/libstdc++-v3/include/Makefile.in > >> @@ -396,6 +396,7 @@ std_freestanding = \ > >> ${std_srcdir}/generator \ > >> ${std_srcdir}/iterator \ > >> ${std_srcdir}/limits \ > >> + ${std_srcdir}/mdspan \ > >> ${std_srcdir}/memory \ > >> ${std_srcdir}/numbers \ > >> ${std_srcdir}/numeric \ > >> diff --git a/libstdc++-v3/include/precompiled/stdc++.h > >> b/libstdc++-v3/include/precompiled/stdc++.h > >> index f4b312d9e47..e7d89c92704 100644 > >> --- a/libstdc++-v3/include/precompiled/stdc++.h > >> +++ b/libstdc++-v3/include/precompiled/stdc++.h > >> @@ -228,6 +228,7 @@ > >> #include <flat_map> > >> #include <flat_set> > >> #include <generator> > >> +#include <mdspan> > >> #include <print> > >> #include <spanstream> > >> #include <stacktrace> > >> diff --git a/libstdc++-v3/include/std/mdspan > >> b/libstdc++-v3/include/std/mdspan > >> new file mode 100644 > >> index 00000000000..4094a416d1e > >> --- /dev/null > >> +++ b/libstdc++-v3/include/std/mdspan > >> @@ -0,0 +1,48 @@ > >> +// <mdspan> -*- C++ -*- > >> + > >> +// Copyright (C) 2025 Free Software Foundation, Inc. > > > > I've just noticed that this file claims to be copyright FSF, but if > > you're contributing under the https://gcc.gnu.org/dco.html terms > > rather than via a copyright assignment to the FSF, then that's > > incorrect. > > > > Please see the <expected> header for the DCO-compatible way to mention > > that the header is covered by copyright without being overly precise. > > > > Otherwise these patches look good and I'll start pushing them this > > week - thanks! > > That's exciting to hear! I'll fix the issues and strip anything layout > related from this series. > > I'm slightly nervous because the first time I used <mdspan> outside of > the test harness I was greeted with an error due to not including a > header inside <mdspan>; and because I was using PCH, it didn't cause an > error during testing.
Yeah, that's annoying. I do all my dev work and local testing in a build with --disable-libstdcxx-pch (which also has the benefit of not recompiling the PCH every time you touch any header) and then I do full testing on another system with PCH enabled. > > I've since reconfigured with `--disable-libstdcxx-pch` and also run > with `--target_board='unix/-Wall/-Wextra/-pedantic'`. > > Is there more I can do to make sure the patches are correct? Testing with -fsanitize=undefined can be useful, but tricky to get the testsuite to use that (you need to bodge some things so that libubsan.so can be found). It's probably not needed here, because everything is constexpr and your tests are already being constant evaluated so most UB should be caught that way. It can also be useful to set GLIBCXX_TESTSUITE_STDS=98,11,14,17,20,23,26 in the environment before running 'make check' so that the tests run for all standard modes, but that also isn't needed here. Because your new tests have { target c++23 } the testsuite already needs to add -std=gnu++23 for them to work, and for any tests that require "newer than the default -std=gnu++17" it re-runs them with the newest (i.e. -std=gnu++26). So your tests are already being run for 23 and 26, and they aren't valid for anything older anyway. So I think you're doing as much as you need to. > > > > > > >> +// > >> +// This file is part of the GNU ISO C++ Library. This library is free > >> +// software; you can redistribute it and/or modify it under the > >> +// terms of the GNU General Public License as published by the > >> +// Free Software Foundation; either version 3, or (at your option) > >> +// any later version. > >> + > >> +// This library is distributed in the hope that it will be useful, > >> +// but WITHOUT ANY WARRANTY; without even the implied warranty of > >> +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > >> +// GNU General Public License for more details. > >> + > >> +// Under Section 7 of GPL version 3, you are granted additional > >> +// permissions described in the GCC Runtime Library Exception, version > >> +// 3.1, as published by the Free Software Foundation. > >> + > >> +// You should have received a copy of the GNU General Public License and > >> +// a copy of the GCC Runtime Library Exception along with this program; > >> +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > >> +// <http://www.gnu.org/licenses/>. > >> + > >> +/** @file mdspan > >> + * This is a Standard C++ Library header. > >> + */ > >> + > >> +#ifndef _GLIBCXX_MDSPAN > >> +#define _GLIBCXX_MDSPAN 1 > >> + > >> +#ifdef _GLIBCXX_SYSHDR > >> +#pragma GCC system_header > >> +#endif > >> + > >> +#define __glibcxx_want_mdspan > >> +#include <bits/version.h> > >> + > >> +#ifdef __glibcxx_mdspan > >> + > >> +namespace std _GLIBCXX_VISIBILITY(default) > >> +{ > >> +_GLIBCXX_BEGIN_NAMESPACE_VERSION > >> + > >> +_GLIBCXX_END_NAMESPACE_VERSION > >> +} > >> +#endif > >> +#endif > >> -- > >> 2.49.0 > >> > > >