On Thu, Apr 27, 2023 at 5:41 AM Jakub Jelinek via Gcc <gcc@gcc.gnu.org> wrote: > > On Thu, Apr 27, 2023 at 11:35:23AM +0200, Helmut Zeisel wrote: > > >Von: "Jakub Jelinek" <ja...@redhat.com> > > >An: "Helmut Zeisel" <hz2...@gmx.at> > > >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