[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
Mon Aug 17 22:19:42 PDT 2020
CodaFi updated this revision to Diff 286201.
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/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->tryGetRealPathName());
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->tryGetRealPathName() : 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->tryGetRealPathName());
if (modMap) {
StringRef ModuleName = victim->ModuleName;
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.286201.patch
Type: text/x-patch
Size: 2090 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200818/cbb2524d/attachment.bin>
More information about the cfe-commits
mailing list