[PATCH] D85981: [clang][Modules] Use File Names Instead of inodes As Loaded Module Keys
Robert Widmann via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Aug 15 18:38:36 PDT 2020
CodaFi updated this revision to Diff 285874.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D85981/new/
https://reviews.llvm.org/D85981
Files:
clang/include/clang/Serialization/ModuleManager.h
clang/lib/Serialization/ASTWriter.cpp
clang/lib/Serialization/ModuleManager.cpp
Index: clang/lib/Serialization/ModuleManager.cpp
===================================================================
--- clang/lib/Serialization/ModuleManager.cpp
+++ clang/lib/Serialization/ModuleManager.cpp
@@ -59,7 +59,7 @@
}
ModuleFile *ModuleManager::lookup(const FileEntry *File) const {
- auto Known = Modules.find(File);
+ auto Known = Modules.find(File->getName());
if (Known == Modules.end())
return nullptr;
@@ -133,7 +133,8 @@
}
// Check whether we already loaded this module, before
- if (ModuleFile *ModuleEntry = Modules.lookup(Entry)) {
+ auto EntryKey = Entry ? Entry->getName() : FileName;
+ if (ModuleFile *ModuleEntry = Modules.lookup(EntryKey)) {
// Check the stored signature.
if (checkSignature(ModuleEntry->Signature, ExpectedSignature, ErrorStr))
return OutOfDate;
@@ -208,7 +209,7 @@
return OutOfDate;
// We're keeping this module. Store it everywhere.
- Module = Modules[Entry] = NewModule.get();
+ Module = Modules[EntryKey] = NewModule.get();
updateModuleImports(*NewModule, ImportedBy, ImportLoc);
@@ -255,7 +256,7 @@
// Delete the modules and erase them from the various structures.
for (ModuleIterator victim = First; victim != Last; ++victim) {
- Modules.erase(victim->File);
+ Modules.erase(victim->File->getName());
if (modMap) {
StringRef ModuleName = victim->ModuleName;
Index: clang/lib/Serialization/ASTWriter.cpp
===================================================================
--- clang/lib/Serialization/ASTWriter.cpp
+++ clang/lib/Serialization/ASTWriter.cpp
@@ -5703,6 +5703,10 @@
}
void ASTWriter::ModuleRead(serialization::SubmoduleID ID, Module *Mod) {
+ if (SubmoduleIDs.find(Mod) != SubmoduleIDs.end()) {
+ PP->getHeaderSearchInfo().getModuleMap().dump();
+ Mod->dump();
+ }
assert(SubmoduleIDs.find(Mod) == SubmoduleIDs.end());
SubmoduleIDs[Mod] = ID;
}
Index: clang/include/clang/Serialization/ModuleManager.h
===================================================================
--- clang/include/clang/Serialization/ModuleManager.h
+++ clang/include/clang/Serialization/ModuleManager.h
@@ -59,8 +59,8 @@
// to implement short-circuiting logic when running DFS over the dependencies.
SmallVector<ModuleFile *, 2> Roots;
- /// All loaded modules, indexed by name.
- llvm::DenseMap<const FileEntry *, ModuleFile *> Modules;
+ /// All loaded modules, indexed by file name.
+ llvm::StringMap<ModuleFile *> Modules;
/// FileManager that handles translating between filenames and
/// FileEntry *.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85981.285874.patch
Type: text/x-patch
Size: 2575 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200816/05701106/attachment.bin>
More information about the cfe-commits
mailing list