Author: Chuanqi Xu Date: 2023-02-16T14:40:32+08:00 New Revision: 612f3ac26f8cdb7487408b5541b224876564e57c
URL: https://github.com/llvm/llvm-project/commit/612f3ac26f8cdb7487408b5541b224876564e57c DIFF: https://github.com/llvm/llvm-project/commit/612f3ac26f8cdb7487408b5541b224876564e57c.diff LOG: [Modules] Remove -fmodules-ts As the diagnostic message shows, we should remove -fmodules-ts flag in clang/llvm17. Since clang/llvm16 is already branched. We can remove the depreacared flag now. Added: Modified: clang/docs/ReleaseNotes.rst clang/include/clang/AST/Decl.h clang/include/clang/AST/DeclBase.h clang/include/clang/Basic/DiagnosticDriverKinds.td clang/include/clang/Basic/DiagnosticFrontendKinds.td clang/include/clang/Basic/LangOptions.def clang/include/clang/Basic/Linkage.h clang/include/clang/Basic/TokenKinds.def clang/include/clang/Driver/Options.td clang/lib/AST/Decl.cpp clang/lib/Basic/IdentifierTable.cpp clang/lib/CodeGen/ItaniumCXXABI.cpp clang/lib/CodeGen/MicrosoftCXXABI.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/FrontendActions.cpp clang/lib/Index/IndexSymbol.cpp clang/lib/Lex/PPDirectives.cpp clang/lib/Lex/Preprocessor.cpp clang/lib/Parse/ParseDeclCXX.cpp clang/lib/Parse/Parser.cpp clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaModule.cpp clang/tools/libclang/CIndex.cpp clang/tools/libclang/CXIndexDataConsumer.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index abb6f0ae8e92e..b91a973b9a666 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -96,6 +96,8 @@ Modified Compiler Flags Removed Compiler Flags ------------------------- +- The deprecated flag `-fmodules-ts` is removed. Please use ``-std=c++20`` + or higher to use standard C++ modules instead. Attribute Changes in Clang -------------------------- diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 863f6ac57f2aa..b32d021b1c695 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -4707,7 +4707,7 @@ class ImportDecl final : public Decl, static bool classofKind(Kind K) { return K == Import; } }; -/// Represents a C++ Modules TS module export declaration. +/// Represents a standard C++ module export declaration. /// /// For example: /// \code diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h index ef5d4d7e7b7b5..7c3b755a438f1 100644 --- a/clang/include/clang/AST/DeclBase.h +++ b/clang/include/clang/AST/DeclBase.h @@ -810,7 +810,7 @@ class alignas(8) Decl { } /// Get the module that owns this declaration for linkage purposes. - /// There only ever is such a module under the C++ Modules TS. + /// There only ever is such a standard C++ module. /// /// \param IgnoreLinkage Ignore the linkage of the entity; assume that /// all declarations in a global module fragment are unowned. diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 8d557846c6ff0..35325de4a34a4 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -638,10 +638,6 @@ def warn_deperecated_fcoroutines_ts_flag : Warning< "the '-fcoroutines-ts' flag is deprecated and it will be removed in Clang 17; " "use '-std=c++20' or higher to use standard C++ coroutines instead">, InGroup<DeprecatedExperimentalCoroutine>; -def warn_deprecated_fmodules_ts_flag : Warning< - "the '-fmodules-ts' flag is deprecated and it will be removed in Clang 17; " - "use '-std=c++20' or higher to use standard C++ modules instead">, - InGroup<DiagGroup<"deprecated-module-ts">>; def err_drv_cannot_mix_options : Error<"cannot specify '%1' along with '%0'">; diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td index d0f672ae5a1bd..c2bce23e9a53f 100644 --- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td @@ -209,7 +209,7 @@ def note_incompatible_analyzer_plugin_api : Note< def err_module_build_requires_fmodules : Error< "module compilation requires '-fmodules'">; def err_module_interface_requires_cpp_modules : Error< - "module interface compilation requires '-std=c++20' or '-fmodules-ts'">; + "module interface compilation requires '-std=c++20'">; def warn_module_config_mismatch : Warning< "module file %0 cannot be loaded due to a configuration mismatch with the current " "compilation">, InGroup<DiagGroup<"module-file-config-mismatch">>, DefaultError; diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index d1cbe43064391..20bddca48cba1 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -171,7 +171,6 @@ BENIGN_LANGOPT(EmitAllDecls , 1, 0, "emitting all declarations") LANGOPT(MathErrno , 1, 1, "errno in math functions") BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like and may be ripped out at any time") LANGOPT(Modules , 1, 0, "modules semantics") -COMPATIBLE_LANGOPT(ModulesTS , 1, 0, "C++ Modules TS syntax") COMPATIBLE_LANGOPT(CPlusPlusModules, 1, 0, "C++ modules syntax") BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 3, CMK_None, "compiling a module interface") diff --git a/clang/include/clang/Basic/Linkage.h b/clang/include/clang/Basic/Linkage.h index f4d442c084cfe..0b7b61954a075 100644 --- a/clang/include/clang/Basic/Linkage.h +++ b/clang/include/clang/Basic/Linkage.h @@ -43,11 +43,6 @@ enum Linkage : unsigned char { /// translation units because of types defined in a inline function. VisibleNoLinkage, - /// Internal linkage according to the Modules TS, but can be referred - /// to from other translation units indirectly through inline functions and - /// templates in the module interface. - ModuleInternalLinkage, - /// Module linkage, which indicates that the entity can be referred /// to from other translation units within the same module, and indirectly /// from arbitrary other translation units through inline functions and @@ -98,8 +93,6 @@ inline Linkage getFormalLinkage(Linkage L) { return ExternalLinkage; case VisibleNoLinkage: return NoLinkage; - case ModuleInternalLinkage: - return InternalLinkage; default: return L; } diff --git a/clang/include/clang/Basic/TokenKinds.def b/clang/include/clang/Basic/TokenKinds.def index 6d35f1bb31fcd..b9da4711a5c2d 100644 --- a/clang/include/clang/Basic/TokenKinds.def +++ b/clang/include/clang/Basic/TokenKinds.def @@ -399,7 +399,7 @@ COROUTINES_KEYWORD(co_await) COROUTINES_KEYWORD(co_return) COROUTINES_KEYWORD(co_yield) -// C++ modules TS keywords +// C++20 keywords MODULES_KEYWORD(module) MODULES_KEYWORD(import) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 9b7f30454534b..f84522c741561 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2427,11 +2427,8 @@ def fimplicit_module_maps : Flag <["-"], "fimplicit-module-maps">, Group<f_Group Flags<[NoXarchOption, CC1Option, CoreOption]>, HelpText<"Implicitly search the file system for module map files.">, MarshallingInfoFlag<HeaderSearchOpts<"ImplicitModuleMaps">>; -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, "||", fcxx_modules.KeyPath)>, + LangOpts<"Modules">, Default<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>; @@ -5979,14 +5976,14 @@ defm fimplicit_modules_use_lock : BoolOption<"f", "implicit-modules-use-lock", PosFlag<SetTrue, [], "Use filesystem locks for implicit modules builds to avoid " "duplicating work in competing clang invocations.">>; -// FIXME: We only need this in C++ modules / Modules TS if we might textually +// FIXME: We only need this in C++ modules if we might textually // enter a diff erent module (eg, when building a header unit). def fmodules_local_submodule_visibility : Flag<["-"], "fmodules-local-submodule-visibility">, HelpText<"Enforce name visibility rules across submodules of the same " "top-level module.">, MarshallingInfoFlag<LangOpts<"ModulesLocalVisibility">>, - ImpliedByAnyOf<[fmodules_ts.KeyPath, fcxx_modules.KeyPath]>; + ImpliedByAnyOf<[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/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index eb633efdfa4e9..cd09e2fe2b05b 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -601,22 +601,14 @@ static bool isExportedFromModuleInterfaceUnit(const NamedDecl *D) { } static LinkageInfo getInternalLinkageFor(const NamedDecl *D) { - // (for the modules ts) Internal linkage declarations within a module - // interface unit are modeled as "module-internal linkage", which means that - // they have internal linkage formally but can be indirectly accessed from - // outside the module via inline functions and templates defined within the - // module. - if (isInModulePurview(D) && D->getASTContext().getLangOpts().ModulesTS) - return LinkageInfo(ModuleInternalLinkage, DefaultVisibility, false); - return LinkageInfo::internal(); } static LinkageInfo getExternalLinkageFor(const NamedDecl *D) { - // C++ Modules TS [basic.link]/6.8: - // - A name declared at namespace scope that does not have internal linkage - // by the previous rules and that is introduced by a non-exported - // declaration has module linkage. + // C++ [basic.link]p4.8: + // - if the declaration of the name is attached to a named module and is not + // exported + // the name has module linkage; // // [basic.namespace.general]/p2 // A namespace is never attached to a named module and never has a name with diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp index 63b08d8d04596..97dc5cd2d9a6d 100644 --- a/clang/lib/Basic/IdentifierTable.cpp +++ b/clang/lib/Basic/IdentifierTable.cpp @@ -191,7 +191,7 @@ static KeywordStatus getKeywordStatusHelper(const LangOptions &LangOpts, case KEYCOROUTINES: return LangOpts.Coroutines ? KS_Enabled : KS_Unknown; case KEYMODULES: - return LangOpts.ModulesTS ? KS_Enabled : KS_Unknown; + return KS_Unknown; case KEYOPENCLCXX: return LangOpts.OpenCLCPlusPlus ? KS_Enabled : KS_Unknown; case KEYMSCOMPAT: diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 18403036e7007..7685902ecb6cc 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -3643,7 +3643,6 @@ static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage(CodeGenModule &CGM, return llvm::GlobalValue::InternalLinkage; case VisibleNoLinkage: - case ModuleInternalLinkage: case ModuleLinkage: case ExternalLinkage: // RTTI is not enabled, which means that this type info struct is going diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index ae785cce09f96..93b81db605b97 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -3655,7 +3655,6 @@ static llvm::GlobalValue::LinkageTypes getLinkageForRTTI(QualType Ty) { return llvm::GlobalValue::InternalLinkage; case VisibleNoLinkage: - case ModuleInternalLinkage: case ModuleLinkage: case ExternalLinkage: return llvm::GlobalValue::LinkOnceODRLinkage; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 7b91fdf933286..31c9c1a37f09c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3686,11 +3686,6 @@ static bool RenderModulesOptions(Compilation &C, const Driver &D, } HaveModules |= HaveClangModules; - if (Args.hasArg(options::OPT_fmodules_ts)) { - D.Diag(diag::warn_deprecated_fmodules_ts_flag); - CmdArgs.push_back("-fmodules-ts"); - 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. diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index b5e868fd67687..ccb983d580440 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -251,11 +251,6 @@ GenerateModuleFromModuleMapAction::CreateOutputFile(CompilerInstance &CI, bool GenerateModuleInterfaceAction::BeginSourceFileAction( CompilerInstance &CI) { - if (!CI.getLangOpts().ModulesTS && !CI.getLangOpts().CPlusPlusModules) { - CI.getDiagnostics().Report(diag::err_module_interface_requires_cpp_modules); - return false; - } - CI.getLangOpts().setCompilingModule(LangOptions::CMK_ModuleInterface); return GenerateModuleAction::BeginSourceFileAction(CI); diff --git a/clang/lib/Index/IndexSymbol.cpp b/clang/lib/Index/IndexSymbol.cpp index a40c218a3c438..d7316538f6061 100644 --- a/clang/lib/Index/IndexSymbol.cpp +++ b/clang/lib/Index/IndexSymbol.cpp @@ -71,7 +71,6 @@ bool index::isFunctionLocalSymbol(const Decl *D) { return true; case VisibleNoLinkage: case UniqueExternalLinkage: - case ModuleInternalLinkage: llvm_unreachable("Not a sema linkage"); case ModuleLinkage: case ExternalLinkage: diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 6ae513dea8782..9e2392529ff53 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -902,8 +902,7 @@ Preprocessor::getHeaderToIncludeForDiagnostics(SourceLocation IncLoc, // If we have a module import syntax, we shouldn't include a header to // make a particular module visible. Let the caller know they should // suggest an import instead. - if (getLangOpts().ObjC || getLangOpts().CPlusPlusModules || - getLangOpts().ModulesTS) + if (getLangOpts().ObjC || getLangOpts().CPlusPlusModules) return nullptr; // If this is an accessible, non-textual header of M's top-level module diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 7ec5247cb31d7..27be7d611f595 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -865,7 +865,7 @@ bool Preprocessor::HandleIdentifier(Token &Identifier) { // keyword when we're in a caching lexer, because caching lexers only get // used in contexts where import declarations are disallowed. // - // Likewise if this is the C++ Modules TS import keyword. + // Likewise if this is the standard C++ import keyword. if (((LastTokenWasAt && II.isModulesImport()) || Identifier.is(tok::kw_import)) && !InMacroArgs && !DisableMacroExpansion && @@ -1279,7 +1279,7 @@ bool Preprocessor::LexAfterModuleImport(Token &Result) { // If we're expecting a '.' or a ';', and we got a '.', then wait until we // see the next identifier. (We can also see a '[[' that begins an - // attribute-specifier-seq here under the C++ Modules TS.) + // attribute-specifier-seq here under the Standard C++ Modules.) if (!ModuleImportExpectsIdentifier && Result.getKind() == tok::period) { ModuleImportExpectsIdentifier = true; CurLexerKind = CLK_LexAfterModuleImport; @@ -1304,12 +1304,12 @@ bool Preprocessor::LexAfterModuleImport(Token &Result) { SemiLoc = Suffix.back().getLocation(); } - // Under the Modules TS, the dot is just part of the module name, and not - // a real hierarchy separator. Flatten such module names now. + // Under the standard C++ Modules, the dot is just part of the module name, + // and not a real hierarchy separator. Flatten such module names now. // // FIXME: Is this the right level to be performing this transformation? std::string FlatModuleName; - if (getLangOpts().ModulesTS || getLangOpts().CPlusPlusModules) { + if (getLangOpts().CPlusPlusModules) { for (auto &Piece : NamedModuleImportPath) { // If the FlatModuleName ends with colon, it implies it is a partition. if (!FlatModuleName.empty() && FlatModuleName.back() != ':') diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 227c1df2bdddd..c7d8eb0af99d4 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -428,7 +428,7 @@ Decl *Parser::ParseLinkage(ParsingDeclSpec &DS, DeclaratorContext Context) { : nullptr; } -/// Parse a C++ Modules TS export-declaration. +/// Parse a standard C++ Modules export-declaration. /// /// export-declaration: /// 'export' declaration @@ -456,13 +456,6 @@ Decl *Parser::ParseExportDeclaration() { BalancedDelimiterTracker T(*this, tok::l_brace); T.consumeOpen(); - // The Modules TS draft says "An export-declaration shall declare at least one - // entity", but the intent is that it shall contain at least one declaration. - if (Tok.is(tok::r_brace) && getLangOpts().ModulesTS) { - Diag(ExportLoc, diag::err_export_empty) - << SourceRange(ExportLoc, Tok.getLocation()); - } - while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) { ParsedAttributes DeclAttrs(AttrFactory); diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index c197d6bdde672..829a187e842b9 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -630,8 +630,8 @@ bool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, goto module_decl; // Note: no need to handle kw_import here. We only form kw_import under - // the Modules TS, and in that case 'export import' is parsed as an - // export-declaration containing an import-declaration. + // the Standard C++ Modules, and in that case 'export import' is parsed as + // an export-declaration containing an import-declaration. // Recognize context-sensitive C++20 'export module' and 'export import' // declarations. @@ -786,7 +786,7 @@ bool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, /// /// [C++0x/GNU] 'extern' 'template' declaration /// -/// [Modules-TS] module-import-declaration +/// [C++20] module-import-declaration /// Parser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, @@ -938,7 +938,7 @@ Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, SingleDecl = ParseModuleImport(SourceLocation(), IS); } break; case tok::kw_export: - if (getLangOpts().CPlusPlusModules || getLangOpts().ModulesTS) { + if (getLangOpts().CPlusPlusModules) { ProhibitAttributes(Attrs); SingleDecl = ParseExportDeclaration(); break; @@ -2388,7 +2388,7 @@ void Parser::ParseMicrosoftIfExistsExternalDeclaration() { /// Parse a declaration beginning with the 'module' keyword or C++20 /// context-sensitive keyword (optionally preceded by 'export'). /// -/// module-declaration: [Modules TS + P0629R0] +/// module-declaration: [C++20] /// 'export'[opt] 'module' module-name attribute-specifier-seq[opt] ';' /// /// global-module-fragment: [C++2a] @@ -2614,7 +2614,7 @@ Decl *Parser::ParseModuleImport(SourceLocation AtLoc, return Import.get(); } -/// Parse a C++ Modules TS / Objective-C module name (both forms use the same +/// Parse a C++ / Objective-C module name (both forms use the same /// grammar). /// /// module-name: diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 80f502c03c188..c8a855d79a8e8 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -1024,16 +1024,6 @@ void Sema::ActOnStartOfTranslationUnit() { if (getLangOpts().CPlusPlusModules && getLangOpts().getCompilingModule() == LangOptions::CMK_HeaderUnit) HandleStartOfHeaderUnit(); - else if (getLangOpts().ModulesTS && - (getLangOpts().getCompilingModule() == - LangOptions::CMK_ModuleInterface || - getLangOpts().getCompilingModule() == LangOptions::CMK_None)) { - // We start in an implied global module fragment. - SourceLocation StartOfTU = - SourceMgr.getLocForStartOfFile(SourceMgr.getMainFileID()); - ActOnGlobalModuleFragmentDecl(StartOfTU); - ModuleScopes.back().ImplicitGlobalModuleFragment = true; - } } void Sema::ActOnEndOfTranslationUnitFragment(TUFragmentKind Kind) { diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp index 8f38dc86fea08..1fd1941ebf429 100644 --- a/clang/lib/Sema/SemaModule.cpp +++ b/clang/lib/Sema/SemaModule.cpp @@ -74,16 +74,6 @@ static std::string stringFromPath(ModuleIdPath Path) { Sema::DeclGroupPtrTy Sema::ActOnGlobalModuleFragmentDecl(SourceLocation ModuleLoc) { - if (!ModuleScopes.empty() && - ModuleScopes.back().Module->Kind == Module::GlobalModuleFragment) { - // Under -std=c++2a -fmodules-ts, we can find an explicit 'module;' after - // already implicitly entering the global module fragment. That's OK. - assert(getLangOpts().CPlusPlusModules && getLangOpts().ModulesTS && - "unexpectedly encountered multiple global module fragment decls"); - ModuleScopes.back().BeginLoc = ModuleLoc; - return nullptr; - } - // We start in the global module; all those declarations are implicitly // module-private (though they do not have module linkage). Module *GlobalModule = @@ -179,8 +169,8 @@ Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) { - assert((getLangOpts().ModulesTS || getLangOpts().CPlusPlusModules) && - "should only have module decl in Modules TS or C++20"); + assert(getLangOpts().CPlusPlusModules && + "should only have module decl in standard C++ modules"); bool IsFirstDecl = ImportState == ModuleImportState::FirstDecl; bool SeenGMF = ImportState == ModuleImportState::GlobalFragment; @@ -244,7 +234,7 @@ Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, return nullptr; } - assert((!getLangOpts().CPlusPlusModules || getLangOpts().ModulesTS || + assert((!getLangOpts().CPlusPlusModules || SeenGMF == (bool)this->GlobalModuleFragment) && "mismatched global module state"); @@ -484,9 +474,8 @@ DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, ModuleIdPath Path, bool IsPartition) { - - bool Cxx20Mode = getLangOpts().CPlusPlusModules || getLangOpts().ModulesTS; - assert((!IsPartition || Cxx20Mode) && "partition seen in non-C++20 code?"); + assert((!IsPartition || getLangOpts().CPlusPlusModules) && + "partition seen in non-C++20 code?"); // For a C++20 module name, flatten into a single identifier with the source // location of the first component. @@ -504,7 +493,7 @@ DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, ModuleName += stringFromPath(Path); ModuleNameLoc = {PP.getIdentifierInfo(ModuleName), Path[0].second}; Path = ModuleIdPath(ModuleNameLoc); - } else if (Cxx20Mode) { + } else if (getLangOpts().CPlusPlusModules) { ModuleName = stringFromPath(Path); ModuleNameLoc = {PP.getIdentifierInfo(ModuleName), Path[0].second}; Path = ModuleIdPath(ModuleNameLoc); @@ -552,8 +541,7 @@ DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, // of the same top-level module. Until we do, make it an error rather than // silently ignoring the import. // FIXME: Should we warn on a redundant import of the current module? - if (Mod->isForBuilding(getLangOpts()) && - (getLangOpts().isCompilingModule() || !getLangOpts().ModulesTS)) { + if (Mod->isForBuilding(getLangOpts())) { Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 18cb4861849e9..b80ad8daf8d51 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -8114,7 +8114,6 @@ CXLinkageKind clang_getCursorLinkage(CXCursor cursor) { case NoLinkage: case VisibleNoLinkage: return CXLinkage_NoLinkage; - case ModuleInternalLinkage: case InternalLinkage: return CXLinkage_Internal; case UniqueExternalLinkage: diff --git a/clang/tools/libclang/CXIndexDataConsumer.cpp b/clang/tools/libclang/CXIndexDataConsumer.cpp index da58a48001c26..006e55500798e 100644 --- a/clang/tools/libclang/CXIndexDataConsumer.cpp +++ b/clang/tools/libclang/CXIndexDataConsumer.cpp @@ -434,7 +434,6 @@ bool CXIndexDataConsumer::isFunctionLocalDecl(const Decl *D) { case InternalLinkage: return true; case VisibleNoLinkage: - case ModuleInternalLinkage: case UniqueExternalLinkage: llvm_unreachable("Not a sema linkage"); case ModuleLinkage: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits