Tested x86_64-pc-linux-gnu, will apply to trunk with the rest of the patch
series.

-- 8< --

At this point there doesn't seem to be much reason not to have modules
support enabled by default in C++20, and it's good get more test coverage to
find corner case bugs like some I fixed recently.

It also seems to make more sense to use the spelling -fmodules rather than
-fmodules-ts, much like we moved from -fconcepts-ts to -fconcepts.  The old
spelling is still accepted for backward compatibility.

gcc/ChangeLog:

        * doc/invoke.texi: Modules are now enabled by default in C++20.
        Change advertised flag from -fmodules-ts to -fmodules.

gcc/c-family/ChangeLog:

        * c.opt: Change advertised flag from -fmodules-ts to -fmodules.
        * c-opts.cc (c_common_post_options): Enable modules by default
        in C++20.

gcc/testsuite/ChangeLog:

        * g++.dg/template/error25.C: Adjust 'export' diagnostic.
        * g++.old-deja/g++.benjamin/tem05.C: Likewise.
        * g++.old-deja/g++.pt/export1.C: Likewise.
        * g++.dg/pch/pch.exp: Specify -fno-modules.
---
 gcc/doc/invoke.texi                           | 32 +++++++++----------
 gcc/c-family/c.opt                            | 10 +++---
 gcc/c-family/c-opts.cc                        |  6 +++-
 gcc/testsuite/g++.dg/template/error25.C       |  2 +-
 .../g++.old-deja/g++.benjamin/tem05.C         |  8 ++---
 gcc/testsuite/g++.old-deja/g++.pt/export1.C   |  2 +-
 gcc/testsuite/g++.dg/pch/pch.exp              |  2 +-
 7 files changed, 32 insertions(+), 30 deletions(-)

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index b27e85bc38a..29fd99fff92 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -223,7 +223,7 @@ in the following sections.
 -fno-implicit-templates
 -fno-implicit-inline-templates
 -fno-implement-inlines
--fmodule-header@r{[}=@var{kind}@r{]} -fmodule-only -fmodules-ts
+-fmodule-header@r{[}=@var{kind}@r{]} -fmodule-only -fmodules
 -fmodule-implicit-inline
 -fno-module-lazy
 -fmodule-mapper=@var{specification}
@@ -3501,14 +3501,12 @@ To save space, do not emit out-of-line copies of inline 
functions
 controlled by @code{#pragma implementation}.  This causes linker
 errors if these functions are not inlined everywhere they are called.
 
-@opindex fmodules-ts
-@opindex fno-modules-ts
-@item -fmodules-ts
-@itemx -fno-modules-ts
-Enable support for C++20 modules (@pxref{C++ Modules}).  The
-@option{-fno-modules-ts} is usually not needed, as that is the
-default.  Even though this is a C++20 feature, it is not currently
-implicitly enabled by selecting that standard version.
+@opindex fmodules
+@opindex fno-modules
+@item -fmodules
+@itemx -fno-modules
+Enable support for C++20 modules (@pxref{C++ Modules}).  This flag is
+enabled by default for C++20 and above.
 
 @opindex fmodule-header
 @item -fmodule-header
@@ -38004,9 +38002,9 @@ affected by how you partition header files into header 
units.
 
 @end table
 
-Modular compilation is @emph{not} enabled with just the
-@option{-std=c++20} option.  You must explicitly enable it with the
-@option{-fmodules-ts} option.  It is independent of the language
+Modular compilation is enabled with the @option{-std=c++20} option.
+You can also enable or disable it explicitly with the
+@option{-fmodules} option.  It is independent of the language
 version selected, although in pre-C++20 versions, it is of course an
 extension.
 
@@ -38024,7 +38022,7 @@ Acyclic Graph (DAG).  You must build imports before the 
importer.
 Header files may themselves be compiled to header units, which are a
 transitional ability aiming at faster compilation.  The
 @option{-fmodule-header} option is used to enable this, and implies
-the @option{-fmodules-ts} option.  These CMIs are named by the fully
+the @option{-fmodules} option.  These CMIs are named by the fully
 resolved underlying header file, and thus may be a complete pathname
 containing subdirectories.  If the header file is found at an absolute
 pathname, the CMI location is still relative to a CMI root directory.
@@ -38033,7 +38031,7 @@ As header files often have no suffix, you commonly have 
to specify a
 @option{-x} option to tell the compiler the source is a header file.
 You may use @option{-x c++-header}, @option{-x c++-user-header} or
 @option{-x c++-system-header}.  When used in conjunction with
-@option{-fmodules-ts}, these all imply an appropriate
+@option{-fmodules}, these all imply an appropriate
 @option{-fmodule-header} option.  The latter two variants use the
 user or system include path to search for the file specified.  This
 allows you to, for instance, compile standard library header files as
@@ -38056,8 +38054,8 @@ the bits/stdc++.h header used for libstdc++ precompiled 
headers you
 can
 
 @smallexample
-g++ -fmodules-ts -x c++-system-header -c bits/stdc++.h
-g++ -fmodules-ts -include bits/stdc++.h mycode.C
+g++ -fmodules -x c++-system-header -c bits/stdc++.h
+g++ -fmodules -include bits/stdc++.h mycode.C
 @end smallexample
 
 and any standard library #includes in mycode.C will be skipped,
@@ -38244,7 +38242,7 @@ preprocessed header; the simplest way to do that is 
compiling the
 @option{-fmodule-header}.
 
 @smallexample
-g++ -fmodules-ts -E my-header.hh -o my-header.ii
+g++ -fmodules -E my-header.hh -o my-header.ii
 g++ -c -fmodule-header my-header.ii
 @end smallexample
 
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 6056dbde4b4..ade49b8cb65 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1997,12 +1997,12 @@ flax-vector-conversions
 C ObjC C++ ObjC++ Var(flag_lax_vector_conversions)
 Allow implicit conversions between vectors with differing numbers of subparts 
and/or differing element types.
 
-fmodules-ts
-C++ ObjC++ Var(flag_modules) Integer Init(0)
-Enable C++ modules-ts (experimental).
+fmodules
+C++ ObjC++ Var(flag_modules) Integer
+Enable C++20 Modules (experimental).
 
-fno-modules
-C++ ObjC++ Undocumented RejectNegative Var(flag_modules,0) Integer
+fmodules-ts
+C++ ObjC++ Alias(fmodules) Undocumented
 ;; undocumented
 
 fmodule-header
diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
index c7115e63ce7..4be6259979d 100644
--- a/gcc/c-family/c-opts.cc
+++ b/gcc/c-family/c-opts.cc
@@ -1183,7 +1183,11 @@ c_common_post_options (const char **pfilename)
   /* C++20 is the final version of concepts.  We still use -fconcepts
      to know when concepts are enabled.  */
   if (cxx_dialect >= cxx20)
-    flag_concepts = 1;
+    {
+      flag_concepts = 1;
+      if (!OPTION_SET_P (flag_modules))
+       flag_modules = true;
+    }
 
   /* Enable lifetime extension of range based for temporaries for C++23.
      Diagnose -std=c++23 -fno-range-for-ext-temps.  */
diff --git a/gcc/testsuite/g++.dg/template/error25.C 
b/gcc/testsuite/g++.dg/template/error25.C
index 77b59cd7ca2..6aaf67471b5 100644
--- a/gcc/testsuite/g++.dg/template/error25.C
+++ b/gcc/testsuite/g++.dg/template/error25.C
@@ -12,5 +12,5 @@ extern void f2 ();
 template<>
 extern void f2<void> ();  // { dg-error "explicit template specialization 
cannot have a storage class" }
 
-export template<class T>  // { dg-warning "keyword 'export'" }
+export template<class T>  // { dg-message "'export'" }
 static void* f3 ();
diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C 
b/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
index 7b6b955383b..81fb5c4c069 100644
--- a/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
+++ b/gcc/testsuite/g++.old-deja/g++.benjamin/tem05.C
@@ -18,7 +18,7 @@
 
 // 1
 // template definition
-export template <class T>  // { dg-warning "" } 
+export template <class T>  // { dg-message "export" }
 bool templ_one(T a) {
    if (a > 0)
      return true;
@@ -41,15 +41,15 @@ public:
   template <class T2> bool compare_ge(T2 test);
 };
 
-export template <class T> // { dg-warning "" } 
+export template <class T> // { dg-message "export" }
 const bool X_one<T>::is_specialized = false;
 
-export template <class T> // { dg-warning "" } 
+export template <class T> // { dg-message "export" }
 unsigned short X_one<T>::ret_id() {
   return id;
 }
 
-export template <class T2> // { dg-warning "" } 
+export template <class T2> // { dg-message "export" }
 bool compare_ge(T2 test) {
   if (test > type) // { dg-error "" } .*
     return true;
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/export1.C 
b/gcc/testsuite/g++.old-deja/g++.pt/export1.C
index 53e7e9b160c..e79785424d2 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/export1.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/export1.C
@@ -15,4 +15,4 @@ return 0;
 }
 
 template <class T> class Y;
-export template <class T> class X;  // { dg-warning "" } export not implemented
+export template <class T> class X;  // { dg-message "export" } export not 
implemented
diff --git a/gcc/testsuite/g++.dg/pch/pch.exp b/gcc/testsuite/g++.dg/pch/pch.exp
index a443e8fc392..5e3e9b1fdd2 100644
--- a/gcc/testsuite/g++.dg/pch/pch.exp
+++ b/gcc/testsuite/g++.dg/pch/pch.exp
@@ -31,7 +31,7 @@ set old_dg_do_what_default "${dg-do-what-default}"
 foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.C]] {
     # We don't try to use the loop-optimizing options, since they are highly
     # unlikely to make any difference to PCH.
-    dg-pch $subdir $test [list "-g" "-O2 -g" "-O2"] ".H"
+    dg-flags-pch $subdir $test "-fno-modules" [list "-g" "-O2 -g" "-O2"] ".H"
 }
 
 set dg-do-what-default "$old_dg_do_what_default"
-- 
2.46.2

Reply via email to