diff --git a/include/clang/Lex/ModuleMap.h b/include/clang/Lex/ModuleMap.h index e41efc5d419deae9da7c38f0057ad29074e57658..0bbcfac3b81b9069a58b1c5b96a63736746bff27 100644 --- a/include/clang/Lex/ModuleMap.h +++ b/include/clang/Lex/ModuleMap.h @@ -268,15 +268,10 @@ public: /// /// \param File The header file that is likely to be included. /// - /// \param RequestingModule Specifies the module the header is intended to be - /// used from. Used to disambiguate if a header is present in multiple - /// modules. - /// /// \returns The module KnownHeader, which provides the module that owns the /// given header file. The KnownHeader is default constructed to indicate /// that no module owns this header file. - KnownHeader findModuleForHeader(const FileEntry *File, - Module *RequestingModule = nullptr); + KnownHeader findModuleForHeader(const FileEntry *File); /// \brief Reports errors if a module must not include a specific file. /// diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp index addad59c5a3e151396d78e07c4aec6d3cdf32d50..c67ce248010f7806849600a073a739a306707827 100644 --- a/lib/Lex/ModuleMap.cpp +++ b/lib/Lex/ModuleMap.cpp @@ -330,41 +330,23 @@ static bool isBetterKnownHeader(const ModuleMap::KnownHeader &New, return false; } -ModuleMap::KnownHeader -ModuleMap::findModuleForHeader(const FileEntry *File, - Module *RequestingModule) { - HeadersMap::iterator Known = findKnownHeader(File); - +ModuleMap::KnownHeader ModuleMap::findModuleForHeader(const FileEntry *File) { auto MakeResult = [&](ModuleMap::KnownHeader R) -> ModuleMap::KnownHeader { if (R.getRole() & ModuleMap::TextualHeader) return ModuleMap::KnownHeader(); return R; }; + HeadersMap::iterator Known = findKnownHeader(File); if (Known != Headers.end()) { ModuleMap::KnownHeader Result; - // Iterate over all modules that 'File' is part of to find the best fit. - for (SmallVectorImpl<KnownHeader>::iterator I = Known->second.begin(), - E = Known->second.end(); - I != E; ++I) { + for (KnownHeader &H : Known->second) { // Cannot use a module if it is unavailable. - if (!I->getModule()->isAvailable()) + if (!H.getModule()->isAvailable()) continue; - - // If 'File' is part of 'RequestingModule', 'RequestingModule' is the - // module we are looking for. - if (I->getModule() == RequestingModule) - return MakeResult(*I); - - // If uses need to be specified explicitly, we are only allowed to return - // modules that are explicitly used by the requesting module. - if (RequestingModule && LangOpts.ModulesDeclUse && - !RequestingModule->directlyUses(I->getModule())) - continue; - - if (!Result || isBetterKnownHeader(*I, Result)) - Result = *I; + if (!Result || isBetterKnownHeader(H, Result)) + Result = H; } return MakeResult(Result); }