[clang][cli] Expose -fno-cxx-modules in cc1
For some use-cases, it might be useful to be able to turn off modules for C++ in `-cc1`. (The feature is implied by `-std=C++20`.) This patch exposes the `-fno-cxx-modules` option in `-cc1`. Reviewed By: arphaman Differential Revision: https://reviews.llvm.org/D106864
This commit is contained in:
parent
9102a16bef
commit
0556138624
|
@ -467,7 +467,6 @@ defvar render_script = LangOpts<"RenderScript">;
|
|||
defvar hip = LangOpts<"HIP">;
|
||||
defvar gnu_mode = LangOpts<"GNUMode">;
|
||||
defvar asm_preprocessor = LangOpts<"AsmPreprocessor">;
|
||||
defvar cpp_modules = LangOpts<"CPlusPlusModules">;
|
||||
|
||||
defvar std = !strconcat("LangStandard::getLangStandardForKind(", lang_std.KeyPath, ")");
|
||||
|
||||
|
@ -1332,8 +1331,11 @@ defm cxx_exceptions: BoolFOption<"cxx-exceptions",
|
|||
defm async_exceptions: BoolFOption<"async-exceptions",
|
||||
LangOpts<"EHAsynch">, DefaultFalse,
|
||||
PosFlag<SetTrue, [CC1Option], "Enable EH Asynchronous exceptions">, NegFlag<SetFalse>>;
|
||||
def fcxx_modules : Flag <["-"], "fcxx-modules">, Group<f_Group>,
|
||||
Flags<[NoXarchOption]>;
|
||||
defm cxx_modules : BoolFOption<"cxx-modules",
|
||||
LangOpts<"CPlusPlusModules">, Default<cpp20.KeyPath>,
|
||||
NegFlag<SetFalse, [CC1Option], "Disable">, PosFlag<SetTrue, [], "Enable">,
|
||||
BothFlags<[NoXarchOption], " modules for C++">>,
|
||||
ShouldParseIf<cplusplus.KeyPath>;
|
||||
def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group<f_Group>;
|
||||
def fdebug_pass_structure : Flag<["-"], "fdebug-pass-structure">, Group<f_Group>;
|
||||
def fdepfile_entry : Joined<["-"], "fdepfile-entry=">,
|
||||
|
@ -2154,7 +2156,7 @@ def fmodules_ts : Flag <["-"], "fmodules-ts">, Group<f_Group>,
|
|||
Flags<[CC1Option]>, HelpText<"Enable support for the C++ Modules TS">,
|
||||
MarshallingInfoFlag<LangOpts<"ModulesTS">>;
|
||||
defm modules : BoolFOption<"modules",
|
||||
LangOpts<"Modules">, Default<!strconcat(fmodules_ts.KeyPath, "||", cpp_modules.KeyPath)>,
|
||||
LangOpts<"Modules">, Default<!strconcat(fmodules_ts.KeyPath, "||", fcxx_modules.KeyPath)>,
|
||||
PosFlag<SetTrue, [CC1Option], "Enable the 'modules' language feature">,
|
||||
NegFlag<SetFalse>, BothFlags<[NoXarchOption, CoreOption]>>;
|
||||
def fmodule_maps : Flag <["-"], "fmodule-maps">, Flags<[CoreOption]>, Alias<fimplicit_module_maps>;
|
||||
|
@ -2213,8 +2215,6 @@ def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group<f_Group>
|
|||
Flags<[CoreOption, NoXarchOption]>;
|
||||
def fno_common : Flag<["-"], "fno-common">, Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Compile common globals like normal definitions">;
|
||||
def fno_cxx_modules : Flag <["-"], "fno-cxx-modules">, Group<f_Group>,
|
||||
Flags<[NoXarchOption]>;
|
||||
defm digraphs : BoolFOption<"digraphs",
|
||||
LangOpts<"Digraphs">, Default<std#".hasDigraphs()">,
|
||||
PosFlag<SetTrue, [], "Enable alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:' (default)">,
|
||||
|
@ -5298,7 +5298,7 @@ def fmodules_local_submodule_visibility :
|
|||
HelpText<"Enforce name visibility rules across submodules of the same "
|
||||
"top-level module.">,
|
||||
MarshallingInfoFlag<LangOpts<"ModulesLocalVisibility">>,
|
||||
ImpliedByAnyOf<[fmodules_ts.KeyPath, cpp_modules.KeyPath]>;
|
||||
ImpliedByAnyOf<[fmodules_ts.KeyPath, fcxx_modules.KeyPath]>;
|
||||
def fmodules_codegen :
|
||||
Flag<["-"], "fmodules-codegen">,
|
||||
HelpText<"Generate code for uses of this module that assumes an explicit "
|
||||
|
|
|
@ -3150,8 +3150,6 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
|
|||
Opts.HexFloats = Std.hasHexFloats();
|
||||
Opts.ImplicitInt = Std.hasImplicitInt();
|
||||
|
||||
Opts.CPlusPlusModules = Opts.CPlusPlus20;
|
||||
|
||||
// Set OpenCL Version.
|
||||
Opts.OpenCL = Std.isOpenCL();
|
||||
if (LangStd == LangStandard::lang_opencl10)
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: rm -rf %t && mkdir %t
|
||||
// RUN: %clang_cc1 -x objective-c++ -std=c++20 -I %t %s -verify=enabled
|
||||
// RUN: %clang_cc1 -x objective-c++ -std=c++20 -fno-cxx-modules -I %t %s -verify=disabled
|
||||
|
||||
// enabled-no-diagnostics
|
||||
|
||||
// The spelling of these errors is misleading.
|
||||
// The important thing is Clang rejected C++20 modules syntax.
|
||||
export module Foo; // disabled-error{{expected template}}
|
||||
// disabled-error@-1{{unknown type name 'module'}}
|
Loading…
Reference in New Issue