Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -1386,7 +1386,7 @@ PosFlag, NegFlag>; defm cxx_modules : BoolFOption<"cxx-modules", LangOpts<"CPlusPlusModules">, Default, - NegFlag, PosFlag, + NegFlag, PosFlag, BothFlags<[NoXarchOption], " modules for C++">>, ShouldParseIf; def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group; Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -3590,6 +3590,12 @@ HaveModules = true; } + if (Args.hasFlag(options::OPT_fcxx_modules, + options::OPT_fno_cxx_modules, false)) { + CmdArgs.push_back("-fcxx-modules"); + HaveModules = true; + } + // -fmodule-maps enables implicit reading of module map files. By default, // this is enabled if we are using Clang's flavor of precompiled modules. if (Args.hasFlag(options::OPT_fimplicit_module_maps, Index: clang/test/Driver/modules.cpp =================================================================== --- clang/test/Driver/modules.cpp +++ clang/test/Driver/modules.cpp @@ -73,3 +73,8 @@ // CHECK-HEADER-UNIT-USE: BAR; FOO; #endif + +// Check the independent use of -fcxx-modules +// +// RUN: %clang -fcxx-modules -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-CXX-MODULES +// CHECK-CXX-MODULES: "-fcxx-modules" Index: clang/test/Modules/cxx-modules.cppm =================================================================== --- /dev/null +++ clang/test/Modules/cxx-modules.cppm @@ -0,0 +1,4 @@ +// This tests that we could use C++20 modules standalone. +// RUN: %clang -fcxx-modules -fsyntax-only -Xclang -verify %s +// expected-no-diagnostics +export module M;