On Mon, 8 May 2023, 09:38 NightStrike via Gcc, wrote: > On Thu, Apr 27, 2023 at 5:41 AM Jakub Jelinek via Gcc > wrote: > > > > On Thu, Apr 27, 2023 at 11:35:23AM +0200, Helmut Zeisel wrote: > > > >Von: "Jakub Jelinek" > > > >An: "Helmut Zeisel" > > > >Cc: gcc@gcc.gnu.org > > > >Betreff: Re: GCC 13.1 compile error when using CXXFLAGS=-std=c++20 > > > >On Thu, Apr 27, 2023 at 11:09:19AM +0200, Helmut Zeisel via Gcc wrote: > > > >> I compiled GCC 13.1.0 with GCC 12 and had the environment variable > CXXFLAGS set to -std=c++20 > > > >> This gives the error (both linux and cygin) > > > >> > > > >> gcc-13.1.0/libstdc++-v3/src/c++98/bitmap_allocator.cc:51:23: error: > ISO C++17 does not allow dynamic exception specifications > > > >> 51 | _M_get(size_t __sz) throw(std::bad_alloc) > > > >> > > > >> After > > > >> > > > >> unset CXXFLAGS > > > >> > > > >> compilation works > > > > > > >Don't do it. > > > > > > Dont do *what*? > > > export CXXFLAGS=... ? > > > > Include explicit -std= settings in such exported variables, especially > when > > building GCC. Packages should decide themselves in which language > version > > they are written in, or if they are written in common subset, they should > > just defer to the compiler default. > > Note, doing that would break building even much older GCC versions. > > Maybe configure should catch that? > > diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac > index 0dd550a4b4b..f0d998aad94 100644 > --- a/libstdc++-v3/configure.ac > +++ b/libstdc++-v3/configure.ac > @@ -86,6 +86,9 @@ AH_TEMPLATE(VERSION, [Version number of package]) > # -fno-builtin must be present here so that a non-conflicting form of > # std::exit can be guessed by AC_PROG_CXX, and used in later tests. > > +AS_CASE(["$CXXFLAGS"], > + [*-std=*], [AC_MSG_ERROR([don't do that])]) > + > save_CXXFLAGS="$CXXFLAGS" > CXXFLAGS="$CXXFLAGS -fno-builtin" > AC_PROG_CC > Seems like a reasonable idea at first glance, somebody could test and submit a patch. That pattern will match a hypothetical option like -ffoo-std=bar which is not a -std option. I think a better pattern would be needed.