Author: Jan Svoboda Date: 2021-08-04T13:46:40+02:00 New Revision: 0556138624edf48621dd49a463dbe12e7101f17d
URL: https://github.com/llvm/llvm-project/commit/0556138624edf48621dd49a463dbe12e7101f17d DIFF: https://github.com/llvm/llvm-project/commit/0556138624edf48621dd49a463dbe12e7101f17d.diff LOG: [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 Added: clang/test/Modules/cxx20-disable.cpp Modified: clang/include/clang/Driver/Options.td clang/lib/Frontend/CompilerInvocation.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index af01f620a94f9..712aa9f8c5c9c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -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 " diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 39335c4771fa3..2c6ba150f4bc5 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -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) diff --git a/clang/test/Modules/cxx20-disable.cpp b/clang/test/Modules/cxx20-disable.cpp new file mode 100644 index 0000000000000..d53c6b49ce565 --- /dev/null +++ b/clang/test/Modules/cxx20-disable.cpp @@ -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'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits