diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2023-05-26 12:24:06 -0700 |
---|---|---|
committer | Jan Svoboda <jan_svoboda@apple.com> | 2023-05-26 15:14:16 -0700 |
commit | 924912956ed570e433440108cc50bd0ee65605b5 (patch) | |
tree | 04f8015329ec3ed8bb7c375ddaf2867feec79bf3 /clang/lib/Lex/ModuleMap.cpp | |
parent | 7adff65d4abf4b743e3834505cdb1a580b4d966e (diff) | |
download | llvm-924912956ed570e433440108cc50bd0ee65605b5.zip llvm-924912956ed570e433440108cc50bd0ee65605b5.tar.gz llvm-924912956ed570e433440108cc50bd0ee65605b5.tar.bz2 |
[clang][modules] NFCI: Distinguish as-written and effective umbrella directories
For modules with umbrellas, we track how they were written in the module map. Unfortunately, the getter for the umbrella directory conflates the "as written" directory and the "effective" directory (either the written one or the parent of the written umbrella header).
This patch makes the distinction between "as written" and "effective" umbrella directories clearer. No functional change intended.
Reviewed By: benlangmuir
Differential Revision: https://reviews.llvm.org/D151581
Diffstat (limited to 'clang/lib/Lex/ModuleMap.cpp')
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 66e9a7e..9bc1ccd 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -266,7 +266,8 @@ void ModuleMap::resolveHeader(Module *Mod, << UmbrellaMod->getFullModuleName(); else // Record this umbrella header. - setUmbrellaHeader(Mod, *File, Header.FileName, RelativePathName.str()); + setUmbrellaHeaderAsWritten(Mod, *File, Header.FileName, + RelativePathName.str()); } else { Module::Header H = {Header.FileName, std::string(RelativePathName.str()), *File}; @@ -622,7 +623,7 @@ ModuleMap::findOrCreateModuleForHeaderInUmbrellaDir(const FileEntry *File) { // Search up the module stack until we find a module with an umbrella // directory. Module *UmbrellaModule = Result; - while (!UmbrellaModule->getUmbrellaDir() && UmbrellaModule->Parent) + while (!UmbrellaModule->getEffectiveUmbrellaDir() && UmbrellaModule->Parent) UmbrellaModule = UmbrellaModule->Parent; if (UmbrellaModule->InferSubmodules) { @@ -760,7 +761,8 @@ ModuleMap::isHeaderUnavailableInModule(const FileEntry *Header, // Search up the module stack until we find a module with an umbrella // directory. Module *UmbrellaModule = Found; - while (!UmbrellaModule->getUmbrellaDir() && UmbrellaModule->Parent) + while (!UmbrellaModule->getEffectiveUmbrellaDir() && + UmbrellaModule->Parent) UmbrellaModule = UmbrellaModule->Parent; if (UmbrellaModule->InferSubmodules) { @@ -1089,7 +1091,8 @@ Module *ModuleMap::inferFrameworkModule(const DirectoryEntry *FrameworkDir, RelativePath = llvm::sys::path::relative_path(RelativePath); // umbrella header "umbrella-header-name" - setUmbrellaHeader(Result, *UmbrellaHeader, ModuleName + ".h", RelativePath); + setUmbrellaHeaderAsWritten(Result, *UmbrellaHeader, ModuleName + ".h", + RelativePath); // export * Result->Exports.push_back(Module::ExportDecl(nullptr, true)); @@ -1167,7 +1170,7 @@ Module *ModuleMap::createShadowedModule(StringRef Name, bool IsFramework, return Result; } -void ModuleMap::setUmbrellaHeader( +void ModuleMap::setUmbrellaHeaderAsWritten( Module *Mod, FileEntryRef UmbrellaHeader, const Twine &NameAsWritten, const Twine &PathRelativeToRootModuleDirectory) { Headers[UmbrellaHeader].push_back(KnownHeader(Mod, NormalHeader)); @@ -1182,9 +1185,9 @@ void ModuleMap::setUmbrellaHeader( Cb->moduleMapAddUmbrellaHeader(&SourceMgr.getFileManager(), UmbrellaHeader); } -void ModuleMap::setUmbrellaDir(Module *Mod, const DirectoryEntry *UmbrellaDir, - const Twine &NameAsWritten, - const Twine &PathRelativeToRootModuleDirectory) { +void ModuleMap::setUmbrellaDirAsWritten( + Module *Mod, const DirectoryEntry *UmbrellaDir, const Twine &NameAsWritten, + const Twine &PathRelativeToRootModuleDirectory) { Mod->Umbrella = UmbrellaDir; Mod->UmbrellaAsWritten = NameAsWritten.str(); Mod->UmbrellaRelativeToRootModuleDirectory = @@ -2563,7 +2566,7 @@ void ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) { } // Record this umbrella directory. - Map.setUmbrellaDir(ActiveModule, Dir, DirNameAsWritten, DirName); + Map.setUmbrellaDirAsWritten(ActiveModule, Dir, DirNameAsWritten, DirName); } /// Parse a module export declaration. @@ -2827,7 +2830,7 @@ void ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) { if (ActiveModule) { // Inferred modules must have umbrella directories. if (!Failed && ActiveModule->IsAvailable && - !ActiveModule->getUmbrellaDir()) { + !ActiveModule->getEffectiveUmbrellaDir()) { Diags.Report(StarLoc, diag::err_mmap_inferred_no_umbrella); Failed = true; } |