diff mbox

RFA: PATCH to use -std=c++98 in stage 1 of bootstrap

Message ID 555CC048.8070209@redhat.com
State New
Headers show

Commit Message

Jason Merrill May 20, 2015, 5:11 p.m. UTC
I want to explicitly pass -std=c++98 to the compiler used in building 
stage 1.  Does this seem like the right way to do that?

Tested x86_64-pc-linux-gnu.

Comments

Alexandre Oliva May 20, 2015, 10:11 p.m. UTC | #1
On May 20, 2015, Jason Merrill <jason@redhat.com> wrote:

> I want to explicitly pass -std=c++98 to the compiler used in building
> stage 1.  Does this seem like the right way to do that?

It certainly works, but I'm a bit concerned about its overriding the
earlier choices of STAGE1_CXXFLAGS, that use CXXFLAGS or STAGE1_CFLAGS
depending on whether or not C++ is being bootstrapped.  Now, since GCC
is in C++ nowadays, not bootstrapping C++ is not really possible, so it
seems to make sense to just drop it.  The top-level is shared with other
projects written in C++, but this change would only impact them if they
involved bootstrapping too, which AFAIK only GCC does.

The only serious problem with the patch is that it changes Makefile.in,
but not the corresponding part of Makefile.tpl from which it is
generated.  Ok with that change.

Now, if you'd also update the comments just before it, that still
suggest we build only C in stage1, that would be appreciated.

Thanks,
diff mbox

Patch

commit 97e77ef17e558cdb6d26d440e691fea710e2a2dc
Author: Jason Merrill <jason@redhat.com>
Date:   Mon May 18 23:58:41 2015 -0400

    	* configure.ac: Add -std=c++98 to stage1_cxxflags.
    	* Makefile.in (STAGE1_CXXFLAGS): And substitute it.
    	* configure: Regenerate.

diff --git a/Makefile.in b/Makefile.in
index c221a0b..c59671a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -489,6 +489,7 @@  STAGEfeedback_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS)
 # overrideable (for a bootstrap build stage1 also builds gcc.info).
 
 STAGE1_CFLAGS = @stage1_cflags@
+STAGE1_CXXFLAGS = @stage1_cxxflags@
 STAGE1_CHECKING = @stage1_checking@
 STAGE1_LANGUAGES = @stage1_languages@
 # * We force-disable intermodule optimizations, even if
diff --git a/configure b/configure
index d804329..37079fb 100755
--- a/configure
+++ b/configure
@@ -559,6 +559,7 @@  compare_exclusions
 host_shared
 stage2_werror_flag
 stage1_checking
+stage1_cxxflags
 stage1_cflags
 MAINT
 MAINTAINER_MODE_FALSE
@@ -14755,6 +14756,13 @@  case $build in
       *) stage1_cflags="-g -J" ;;
     esac ;;
 esac
+stage1_cxxflags="$stage1_cflags"
+if test "$GCC" = yes; then
+  # Build stage 1 in C++98 mode to ensure that a C++98 compiler can still
+  # start the bootstrap.
+  stage1_cxxflags="$stage1_cxxflags -std=c++98"
+fi
+
 
 
 
diff --git a/configure.ac b/configure.ac
index 4da04b7..2bf3245 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3476,8 +3476,15 @@  case $build in
       *) stage1_cflags="-g -J" ;;
     esac ;;
 esac
+stage1_cxxflags="$stage1_cflags"
+if test "$GCC" = yes; then
+  # Build stage 1 in C++98 mode to ensure that a C++98 compiler can still
+  # start the bootstrap.
+  stage1_cxxflags="$stage1_cxxflags -std=c++98"
+fi
 
 AC_SUBST(stage1_cflags)
+AC_SUBST(stage1_cxxflags)
 
 # Enable --enable-checking in stage1 of the compiler.
 AC_ARG_ENABLE(stage1-checking,