diff options
Diffstat (limited to 'clang/lib/Lex/ModuleMap.cpp')
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 87a90bc..174d639 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -567,9 +567,11 @@ static bool isBetterKnownHeader(const ModuleMap::KnownHeader &New, } ModuleMap::KnownHeader ModuleMap::findModuleForHeader(const FileEntry *File, - bool AllowTextual) { + bool AllowTextual, + bool AllowExcluded) { auto MakeResult = [&](ModuleMap::KnownHeader R) -> ModuleMap::KnownHeader { - if (!AllowTextual && R.getRole() & ModuleMap::TextualHeader) + if ((!AllowTextual && R.getRole() & ModuleMap::TextualHeader) || + (!AllowExcluded && R.getRole() & ModuleMap::ExcludedHeader)) return {}; return R; }; @@ -700,6 +702,9 @@ ModuleMap::isHeaderUnavailableInModule(const FileEntry *Header, E = Known->second.end(); I != E; ++I) { + if (I->getRole() == ModuleMap::ExcludedHeader) + continue; + if (I->isAvailable() && (!RequestingModule || I->getModule()->isSubModuleOf(RequestingModule))) { @@ -1261,11 +1266,13 @@ void ModuleMap::addHeader(Module *Mod, Module::Header Header, } void ModuleMap::excludeHeader(Module *Mod, Module::Header Header) { + KnownHeader KH(Mod, ModuleHeaderRole::ExcludedHeader); + // Add this as a known header so we won't implicitly add it to any // umbrella directory module. // FIXME: Should we only exclude it from umbrella modules within the // specified module? - (void) Headers[Header.Entry]; + Headers[Header.Entry].push_back(KH); Mod->Headers[Module::HK_Excluded].push_back(std::move(Header)); } |