From 6f7f03ccb12e16b4a5bf79638276cb7df4271e68 Mon Sep 17 00:00:00 2001 From: Victor Leschuk Date: Wed, 30 Aug 2017 11:31:56 +0000 Subject: [PATCH] Revert r312105 [modules] Add ability to specify module name to module file mapping Looks like it breaks win10 builder. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@312112 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/Modules.rst | 11 ++---- include/clang/Driver/Options.td | 4 +- include/clang/Lex/HeaderSearch.h | 30 +++++--------- include/clang/Lex/HeaderSearchOptions.h | 4 -- include/clang/Serialization/ASTReader.h | 10 ----- include/clang/Serialization/ModuleManager.h | 14 ++----- lib/Driver/ToolChains/Clang.cpp | 9 +---- lib/Frontend/CompilerInstance.cpp | 17 ++------ lib/Frontend/CompilerInvocation.cpp | 22 ++--------- lib/Frontend/FrontendActions.cpp | 4 +- lib/Lex/HeaderSearch.cpp | 23 +++++------ lib/Serialization/ASTReader.cpp | 32 ++------------- lib/Serialization/ASTWriter.cpp | 18 ++------- lib/Serialization/GlobalModuleIndex.cpp | 4 -- lib/Serialization/ModuleManager.cpp | 16 ++------ .../basic/basic.search/module-import.cpp | 39 ------------------- 16 files changed, 49 insertions(+), 208 deletions(-) delete mode 100644 test/CXX/modules-ts/basic/basic.search/module-import.cpp diff --git a/docs/Modules.rst b/docs/Modules.rst index 9650279261..ed6f817157 100644 --- a/docs/Modules.rst +++ b/docs/Modules.rst @@ -213,14 +213,8 @@ Command-line parameters ``-fno-implicit-modules`` All modules used by the build must be specified with ``-fmodule-file``. -``-fmodule-file=[=]`` - Specify the mapping of module names to precompiled module files. If the - name is omitted, then the module file is loaded whether actually required - or not. If the name is specified, then the mapping is treated as another - prebuilt module search mechanism (in addition to ``-fprebuilt-module-path``) - and the module is only loaded if required. Note that in this case the - specified file also overrides this module's paths that might be embedded - in other precompiled module files. +``-fmodule-file=`` + Load the given precompiled module file. ``-fprebuilt-module-path=`` Specify the path to the prebuilt modules. If specified, we will look for modules in this directory for a given top-level module name. We don't need a module map for loading prebuilt modules in this directory and the compiler will not try to rebuild these modules. This can be specified multiple times. @@ -951,3 +945,4 @@ PCHInternals_ .. [#] The preprocessing context in which the modules are parsed is actually dependent on the command-line options provided to the compiler, including the language dialect and any ``-D`` options. However, the compiled modules for different command-line options are kept distinct, and any preprocessor directives that occur within the translation unit are ignored. See the section on the `Configuration macros declaration`_ for more information. .. _PCHInternals: PCHInternals.html + diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 38b694fd5d..2f8ededbc0 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1125,8 +1125,8 @@ def fmodule_map_file : Joined<["-"], "fmodule-map-file=">, Group, Flags<[DriverOption,CC1Option]>, MetaVarName<"">, HelpText<"Load this module map file">; def fmodule_file : Joined<["-"], "fmodule-file=">, - Group, Flags<[DriverOption,CC1Option]>, MetaVarName<"[=]">, - HelpText<"Specify the mapping of module name to precompiled module file, or load a module file if name is omitted.">; + Group, Flags<[DriverOption,CC1Option]>, + HelpText<"Load this precompiled module file">, MetaVarName<"">; def fmodules_ignore_macro : Joined<["-"], "fmodules-ignore-macro=">, Group, Flags<[CC1Option]>, HelpText<"Ignore the definition of the given macro when building and loading modules">; def fmodules_decluse : Flag <["-"], "fmodules-decluse">, Group, diff --git a/include/clang/Lex/HeaderSearch.h b/include/clang/Lex/HeaderSearch.h index 126bbdfc13..1b7f80c87f 100644 --- a/include/clang/Lex/HeaderSearch.h +++ b/include/clang/Lex/HeaderSearch.h @@ -471,41 +471,29 @@ public: /// \brief Get filenames for all registered header maps. void getHeaderMapFileNames(SmallVectorImpl &Names) const; - /// \brief Retrieve the name of the cached module file that should be used - /// to load the given module. + /// \brief Retrieve the name of the module file that should be used to + /// load the given module. /// /// \param Module The module whose module file name will be returned. /// /// \returns The name of the module file that corresponds to this module, /// or an empty string if this module does not correspond to any module file. - std::string getCachedModuleFileName(Module *Module); + std::string getModuleFileName(Module *Module); - /// \brief Retrieve the name of the prebuilt module file that should be used - /// to load a module with the given name. - /// - /// \param ModuleName The module whose module file name will be returned. - /// - /// \param FileMapOnly If true, then only look in the explicit module name - // to file name map and skip the directory search. - /// - /// \returns The name of the module file that corresponds to this module, - /// or an empty string if this module does not correspond to any module file. - std::string getPrebuiltModuleFileName(StringRef ModuleName, - bool FileMapOnly = false); - - - /// \brief Retrieve the name of the (to-be-)cached module file that should - /// be used to load a module with the given name. + /// \brief Retrieve the name of the module file that should be used to + /// load a module with the given name. /// /// \param ModuleName The module whose module file name will be returned. /// /// \param ModuleMapPath A path that when combined with \c ModuleName /// uniquely identifies this module. See Module::ModuleMap. /// + /// \param UsePrebuiltPath Whether we should use the prebuilt module path. + /// /// \returns The name of the module file that corresponds to this module, /// or an empty string if this module does not correspond to any module file. - std::string getCachedModuleFileName(StringRef ModuleName, - StringRef ModuleMapPath); + std::string getModuleFileName(StringRef ModuleName, StringRef ModuleMapPath, + bool UsePrebuiltPath); /// \brief Lookup a module Search for a module with the given name. /// diff --git a/include/clang/Lex/HeaderSearchOptions.h b/include/clang/Lex/HeaderSearchOptions.h index 356f500335..ca3a84e75e 100644 --- a/include/clang/Lex/HeaderSearchOptions.h +++ b/include/clang/Lex/HeaderSearchOptions.h @@ -17,7 +17,6 @@ #include "llvm/ADT/StringRef.h" #include #include -#include namespace clang { @@ -95,9 +94,6 @@ public: /// \brief The directory used for a user build. std::string ModuleUserBuildPath; - /// \brief The mapping of module names to prebuilt module files. - std::map PrebuiltModuleFiles; - /// \brief The directories used to load prebuilt module files. std::vector PrebuiltModulePaths; diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index 94ac9f2fac..ec6e148dd7 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -2142,19 +2142,9 @@ public: // \brief Read a string static std::string ReadString(const RecordData &Record, unsigned &Idx); - // \brief Skip a string - static void SkipString(const RecordData &Record, unsigned &Idx) { - Idx += Record[Idx] + 1; - } - // \brief Read a path std::string ReadPath(ModuleFile &F, const RecordData &Record, unsigned &Idx); - // \brief Skip a path - static void SkipPath(const RecordData &Record, unsigned &Idx) { - SkipString(Record, Idx); - } - /// \brief Read a version tuple. static VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx); diff --git a/include/clang/Serialization/ModuleManager.h b/include/clang/Serialization/ModuleManager.h index ffc42ce604..fae387cac7 100644 --- a/include/clang/Serialization/ModuleManager.h +++ b/include/clang/Serialization/ModuleManager.h @@ -27,7 +27,6 @@ class GlobalModuleIndex; class MemoryBufferCache; class ModuleMap; class PCHContainerReader; -class HeaderSearch; namespace serialization { @@ -59,9 +58,6 @@ class ModuleManager { /// \brief Knows how to unwrap module containers. const PCHContainerReader &PCHContainerRdr; - /// \brief Preprocessor's HeaderSearchInfo containing the module map. - const HeaderSearch &HeaderSearchInfo; - /// \brief A lookup of in-memory (virtual file) buffers llvm::DenseMap> InMemoryBuffers; @@ -132,8 +128,7 @@ public: typedef std::pair ModuleOffset; explicit ModuleManager(FileManager &FileMgr, MemoryBufferCache &PCMCache, - const PCHContainerReader &PCHContainerRdr, - const HeaderSearch &HeaderSearchInfo); + const PCHContainerReader &PCHContainerRdr); ~ModuleManager(); /// \brief Forward iterator to traverse all loaded modules. @@ -168,11 +163,8 @@ public: /// \brief Returns the module associated with the given index ModuleFile &operator[](unsigned Index) const { return *Chain[Index]; } - /// \brief Returns the module associated with the given file name. - ModuleFile *lookupByFileName(StringRef FileName) const; - - /// \brief Returns the module associated with the given module name. - ModuleFile *lookupByModuleName(StringRef ModName) const; + /// \brief Returns the module associated with the given name + ModuleFile *lookup(StringRef Name) const; /// \brief Returns the module associated with the given module file. ModuleFile *lookup(const FileEntry *File) const; diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp index 362ce88656..84e0de2a45 100644 --- a/lib/Driver/ToolChains/Clang.cpp +++ b/lib/Driver/ToolChains/Clang.cpp @@ -3649,11 +3649,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (HaveAnyModules) { // -fprebuilt-module-path specifies where to load the prebuilt module files. - for (const Arg *A : Args.filtered(options::OPT_fprebuilt_module_path)) { + for (const Arg *A : Args.filtered(options::OPT_fprebuilt_module_path)) CmdArgs.push_back(Args.MakeArgString( std::string("-fprebuilt-module-path=") + A->getValue())); - A->claim(); - } } // -fmodule-name specifies the module that is currently being built (or @@ -3676,10 +3674,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } } - // The -fmodule-file== form specifies the mapping of module - // names to precompiled module files (the module is loaded only if used). - // The -fmodule-file= form can be used to unconditionally load - // precompiled module files (whether used or not). + // -fmodule-file can be used to specify files containing precompiled modules. if (HaveAnyModules) Args.AddAllArgs(CmdArgs, options::OPT_fmodule_file); else diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 9a4bcc2722..84d837d488 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -1641,14 +1641,6 @@ CompilerInstance::loadModule(SourceLocation ImportLoc, } else if (ModuleName == getLangOpts().CurrentModule) { // This is the module we're building. Module = PP->getHeaderSearchInfo().lookupModule(ModuleName); - /// FIXME: perhaps we should (a) look for a module using the module name - // to file map (PrebuiltModuleFiles) and (b) diagnose if still not found? - //if (Module == nullptr) { - // getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found) - // << ModuleName; - // ModuleBuildFailed = true; - // return ModuleLoadResult(); - //} Known = KnownModules.insert(std::make_pair(Path[0].first, Module)).first; } else { // Search for a module with the given name. @@ -1670,17 +1662,16 @@ CompilerInstance::loadModule(SourceLocation ImportLoc, } // Try to load the module from the prebuilt module path. - if (Source == ModuleNotFound && (!HSOpts.PrebuiltModuleFiles.empty() || - !HSOpts.PrebuiltModulePaths.empty())) { - ModuleFileName = - PP->getHeaderSearchInfo().getPrebuiltModuleFileName(ModuleName); + if (Source == ModuleNotFound && !HSOpts.PrebuiltModulePaths.empty()) { + ModuleFileName = PP->getHeaderSearchInfo().getModuleFileName( + ModuleName, "", /*UsePrebuiltPath*/ true); if (!ModuleFileName.empty()) Source = PrebuiltModulePath; } // Try to load the module from the module cache. if (Source == ModuleNotFound && Module) { - ModuleFileName = PP->getHeaderSearchInfo().getCachedModuleFileName(Module); + ModuleFileName = PP->getHeaderSearchInfo().getModuleFileName(Module); Source = ModuleCache; } diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index f9dafbb88e..2cc93c1f13 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1009,12 +1009,9 @@ static void ParseDependencyOutputArgs(DependencyOutputOptions &Opts, // They won't be discovered by the regular preprocessor, so // we let make / ninja to know about this implicit dependency. Opts.ExtraDeps = Args.getAllArgValues(OPT_fdepfile_entry); - // Only the -fmodule-file= form. - for (const Arg *A : Args.filtered(OPT_fmodule_file)) { - StringRef Val = A->getValue(); - if (Val.find('=') == StringRef::npos) - Opts.ExtraDeps.push_back(Val); - } + auto ModuleFiles = Args.getAllArgValues(OPT_fmodule_file); + Opts.ExtraDeps.insert(Opts.ExtraDeps.end(), ModuleFiles.begin(), + ModuleFiles.end()); } static bool parseShowColorsArgs(const ArgList &Args, bool DefaultColor) { @@ -1343,12 +1340,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Opts.UseGlobalModuleIndex = !Args.hasArg(OPT_fno_modules_global_index); Opts.GenerateGlobalModuleIndex = Opts.UseGlobalModuleIndex; Opts.ModuleMapFiles = Args.getAllArgValues(OPT_fmodule_map_file); - // Only the -fmodule-file= form. - for (const Arg *A : Args.filtered(OPT_fmodule_file)) { - StringRef Val = A->getValue(); - if (Val.find('=') == StringRef::npos) - Opts.ModuleFiles.push_back(Val); - } + Opts.ModuleFiles = Args.getAllArgValues(OPT_fmodule_file); Opts.ModulesEmbedFiles = Args.getAllArgValues(OPT_fmodules_embed_file_EQ); Opts.ModulesEmbedAllFiles = Args.hasArg(OPT_fmodules_embed_all_files); Opts.IncludeTimestamps = !Args.hasArg(OPT_fno_pch_timestamp); @@ -1552,12 +1544,6 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args, Opts.ModuleCachePath = P.str(); Opts.ModuleUserBuildPath = Args.getLastArgValue(OPT_fmodules_user_build_path); - // Only the -fmodule-file== form. - for (const Arg *A : Args.filtered(OPT_fmodule_file)) { - StringRef Val = A->getValue(); - if (Val.find('=') != StringRef::npos) - Opts.PrebuiltModuleFiles.insert(Val.split('=')); - } for (const Arg *A : Args.filtered(OPT_fprebuilt_module_path)) Opts.AddPrebuiltModulePath(A->getValue()); Opts.DisableModuleHash = Args.hasArg(OPT_fdisable_module_hash); diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index 3e3483d2c6..d42400183a 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -185,8 +185,8 @@ GenerateModuleFromModuleMapAction::CreateOutputFile(CompilerInstance &CI, HeaderSearch &HS = CI.getPreprocessor().getHeaderSearchInfo(); CI.getFrontendOpts().OutputFile = - HS.getCachedModuleFileName(CI.getLangOpts().CurrentModule, - ModuleMapFile); + HS.getModuleFileName(CI.getLangOpts().CurrentModule, ModuleMapFile, + /*UsePrebuiltPath=*/false); } // We use createOutputFile here because this is exposed via libclang, and we diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index b18d27376a..1ebcc0a1c6 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -128,24 +128,21 @@ void HeaderSearch::getHeaderMapFileNames( Names.push_back(HM.first->getName()); } -std::string HeaderSearch::getCachedModuleFileName(Module *Module) { +std::string HeaderSearch::getModuleFileName(Module *Module) { const FileEntry *ModuleMap = getModuleMap().getModuleMapFileForUniquing(Module); - return getCachedModuleFileName(Module->Name, ModuleMap->getName()); + return getModuleFileName(Module->Name, ModuleMap->getName(), + /*UsePrebuiltPath*/false); } -std::string HeaderSearch::getPrebuiltModuleFileName(StringRef ModuleName, - bool FileMapOnly) { - // First check the module name to pcm file map. - auto i (HSOpts->PrebuiltModuleFiles.find(ModuleName)); - if (i != HSOpts->PrebuiltModuleFiles.end()) - return i->second; - - if (FileMapOnly || HSOpts->PrebuiltModulePaths.empty()) +std::string HeaderSearch::getModuleFileName(StringRef ModuleName, + StringRef ModuleMapPath, + bool UsePrebuiltPath) { + if (UsePrebuiltPath) { + if (HSOpts->PrebuiltModulePaths.empty()) return std::string(); - // Then go through each prebuilt module directory and try to find the pcm - // file. + // Go though each prebuilt module path and try to find the pcm file. for (const std::string &Dir : HSOpts->PrebuiltModulePaths) { SmallString<256> Result(Dir); llvm::sys::fs::make_absolute(Result); @@ -157,8 +154,6 @@ std::string HeaderSearch::getPrebuiltModuleFileName(StringRef ModuleName, return std::string(); } -std::string HeaderSearch::getCachedModuleFileName(StringRef ModuleName, - StringRef ModuleMapPath) { // If we don't have a module cache path or aren't supposed to use one, we // can't do anything. if (getModuleCachePath().empty()) diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 2db46a6570..55136e3a3c 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -2485,23 +2485,7 @@ ASTReader::ReadControlBlock(ModuleFile &F, {{(uint32_t)Record[Idx++], (uint32_t)Record[Idx++], (uint32_t)Record[Idx++], (uint32_t)Record[Idx++], (uint32_t)Record[Idx++]}}}; - - std::string ImportedName = ReadString(Record, Idx); - std::string ImportedFile; - - // For prebuilt and explicit modules first consult the file map for - // an override. Note that here we don't search prebuilt module - // directories, only the explicit name to file mappings. Also, we will - // still verify the size/signature making sure it is essentially the - // same file but perhaps in a different location. - if (ImportedKind == MK_PrebuiltModule || ImportedKind == MK_ExplicitModule) - ImportedFile = PP.getHeaderSearchInfo().getPrebuiltModuleFileName( - ImportedName, /*FileMapOnly*/ true); - - if (ImportedFile.empty()) - ImportedFile = ReadPath(F, Record, Idx); - else - SkipPath(Record, Idx); + auto ImportedFile = ReadPath(F, Record, Idx); // If our client can't cope with us being out of date, we can't cope with // our dependency being missing. @@ -3436,18 +3420,12 @@ void ASTReader::ReadModuleOffsetMap(ModuleFile &F) const { RemapBuilder TypeRemap(F.TypeRemap); while (Data < DataEnd) { - // FIXME: Looking up dependency modules by filename is horrible. Let's - // start fixing this with prebuilt and explicit modules and see how it - // goes... + // FIXME: Looking up dependency modules by filename is horrible. using namespace llvm::support; - ModuleKind Kind = static_cast( - endian::readNext(Data)); uint16_t Len = endian::readNext(Data); StringRef Name = StringRef((const char*)Data, Len); Data += Len; - ModuleFile *OM = (Kind == MK_PrebuiltModule || Kind == MK_ExplicitModule - ? ModuleMgr.lookupByModuleName(Name) - : ModuleMgr.lookupByFileName(Name)); + ModuleFile *OM = ModuleMgr.lookup(Name); if (!OM) { std::string Msg = "SourceLocation remap refers to unknown module, cannot find "; @@ -4778,7 +4756,6 @@ bool ASTReader::readASTFileControlBlock( while (Idx < N) { // Read information about the AST file. Idx += 5; // ImportLoc, Size, ModTime, Signature - SkipString(Record, Idx); // Module name; FIXME: pass to listener? std::string Filename = ReadString(Record, Idx); ResolveImportedPath(Filename, ModuleDir); Listener.visitImport(Filename); @@ -10369,8 +10346,7 @@ ASTReader::ASTReader(Preprocessor &PP, ASTContext *Context, SourceMgr(PP.getSourceManager()), FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr), Diags(PP.getDiagnostics()), PP(PP), ContextObj(Context), - ModuleMgr(PP.getFileManager(), PP.getPCMCache(), PCHContainerRdr, - PP.getHeaderSearchInfo()), + ModuleMgr(PP.getFileManager(), PP.getPCMCache(), PCHContainerRdr), PCMCache(PP.getPCMCache()), DummyIdResolver(PP), ReadTimer(std::move(ReadTimer)), isysroot(isysroot), DisableValidation(DisableValidation), diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 0d45b27cbe..62c9fb4620 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -1505,7 +1505,6 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context, for (auto I : M.Signature) Record.push_back(I); - AddString(M.ModuleName, Record); AddPath(M.FileName, Record); } Stream.EmitRecord(IMPORTS, Record); @@ -4780,8 +4779,7 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot, // each of those modules were mapped into our own offset/ID space, so that // the reader can build the appropriate mapping to its own offset/ID space. // The map consists solely of a blob with the following format: - // *(module-kind:i8 - // module-name-len:i16 module-name:len*i8 + // *(module-name-len:i16 module-name:len*i8 // source-location-offset:i32 // identifier-id:i32 // preprocessed-entity-id:i32 @@ -4792,10 +4790,6 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot, // c++-base-specifiers-id:i32 // type-id:i32) // - // module-kind is the ModuleKind enum value. If it is MK_PrebuiltModule or - // MK_ExplicitModule, then the module-name is the module name. Otherwise, - // it is the module file name. - // auto Abbrev = std::make_shared(); Abbrev->Add(BitCodeAbbrevOp(MODULE_OFFSET_MAP)); Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); @@ -4806,13 +4800,9 @@ ASTFileSignature ASTWriter::WriteASTCore(Sema &SemaRef, StringRef isysroot, for (ModuleFile &M : Chain->ModuleMgr) { using namespace llvm::support; endian::Writer LE(Out); - LE.write(static_cast(M.Kind)); - StringRef Name = - M.Kind == MK_PrebuiltModule || M.Kind == MK_ExplicitModule - ? M.ModuleName - : M.FileName; - LE.write(Name.size()); - Out.write(Name.data(), Name.size()); + StringRef FileName = M.FileName; + LE.write(FileName.size()); + Out.write(FileName.data(), FileName.size()); // Note: if a base ID was uint max, it would not be possible to load // another module after it or have more than one entity inside it. diff --git a/lib/Serialization/GlobalModuleIndex.cpp b/lib/Serialization/GlobalModuleIndex.cpp index 20c114297b..6978e7e097 100644 --- a/lib/Serialization/GlobalModuleIndex.cpp +++ b/lib/Serialization/GlobalModuleIndex.cpp @@ -619,10 +619,6 @@ bool GlobalModuleIndexBuilder::loadModuleFile(const FileEntry *File) { (uint32_t)Record[Idx++], (uint32_t)Record[Idx++], (uint32_t)Record[Idx++]}}}; - // Skip the module name (currently this is only used for prebuilt - // modules while here we are only dealing with cached). - Idx += Record[Idx] + 1; - // Retrieve the imported file name. unsigned Length = Record[Idx++]; SmallString<128> ImportedFile(Record.begin() + Idx, diff --git a/lib/Serialization/ModuleManager.cpp b/lib/Serialization/ModuleManager.cpp index 75634401f6..1dee4d0698 100644 --- a/lib/Serialization/ModuleManager.cpp +++ b/lib/Serialization/ModuleManager.cpp @@ -28,7 +28,7 @@ using namespace clang; using namespace serialization; -ModuleFile *ModuleManager::lookupByFileName(StringRef Name) const { +ModuleFile *ModuleManager::lookup(StringRef Name) const { const FileEntry *Entry = FileMgr.getFile(Name, /*openFile=*/false, /*cacheFailure=*/false); if (Entry) @@ -37,14 +37,6 @@ ModuleFile *ModuleManager::lookupByFileName(StringRef Name) const { return nullptr; } -ModuleFile *ModuleManager::lookupByModuleName(StringRef Name) const { - if (const Module *Mod = HeaderSearchInfo.getModuleMap().findModule(Name)) - if (const FileEntry *File = Mod->getASTFile()) - return lookup(File); - - return nullptr; -} - ModuleFile *ModuleManager::lookup(const FileEntry *File) const { auto Known = Modules.find(File); if (Known == Modules.end()) @@ -314,11 +306,9 @@ void ModuleManager::moduleFileAccepted(ModuleFile *MF) { } ModuleManager::ModuleManager(FileManager &FileMgr, MemoryBufferCache &PCMCache, - const PCHContainerReader &PCHContainerRdr, - const HeaderSearch& HeaderSearchInfo) + const PCHContainerReader &PCHContainerRdr) : FileMgr(FileMgr), PCMCache(&PCMCache), PCHContainerRdr(PCHContainerRdr), - HeaderSearchInfo (HeaderSearchInfo), GlobalIndex(), - FirstVisitState(nullptr) {} + GlobalIndex(), FirstVisitState(nullptr) {} ModuleManager::~ModuleManager() { delete FirstVisitState; } diff --git a/test/CXX/modules-ts/basic/basic.search/module-import.cpp b/test/CXX/modules-ts/basic/basic.search/module-import.cpp deleted file mode 100644 index 0b5f39d072..0000000000 --- a/test/CXX/modules-ts/basic/basic.search/module-import.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Tests for imported module search. -// -// RUN: rm -rf %t -// RUN: mkdir -p %t -// RUN: echo 'export module x; int a, b;' > %t/x.cppm -// RUN: echo 'export module y; import x; int c;' > %t/y.cppm -// RUN: echo 'export module z; import y; int d;' > %t/z.cppm -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface %t/x.cppm -o %t/x.pcm -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface -fmodule-file=%t/x.pcm %t/y.cppm -o %t/y.pcm -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/x.pcm -verify %s \ -// RUN: -DMODULE_NAME=x -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/y.pcm -verify %s \ -// RUN: -DMODULE_NAME=y -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=x=%t/x.pcm -verify %s \ -// RUN: -DMODULE_NAME=x -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=y=%t/y.pcm -verify %s \ -// RUN: -DMODULE_NAME=y -// -// RUN: mv %t/x.pcm %t/a.pcm -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=x=%t/a.pcm -verify %s \ -// RUN: -DMODULE_NAME=x -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=%t/y.pcm -fmodule-file=x=%t/a.pcm -verify %s \ -// RUN: -DMODULE_NAME=y -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=y=%t/y.pcm -fmodule-file=x=%t/a.pcm -verify %s \ -// RUN: -DMODULE_NAME=y -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -emit-module-interface -fmodule-file=y=%t/y.pcm -fmodule-file=x=%t/a.pcm %t/z.cppm -o %t/z.pcm -// -// RUN: %clang_cc1 -std=c++1z -fmodules-ts -I%t -fmodule-file=z=%t/z.pcm -fmodule-file=y=%t/y.pcm -fmodule-file=x=%t/a.pcm -verify %s \ -// RUN: -DMODULE_NAME=z -// - -import MODULE_NAME; - -// expected-no-diagnostics -- 2.40.0