diff options
author | Ben Langmuir <blangmuir@apple.com> | 2022-10-04 15:08:08 -0700 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2022-10-05 13:12:43 -0700 |
commit | 5ea78c4113f8d2c8be24152f2dd0cadaea352c9d (patch) | |
tree | c0561866efb1c7cbe9b5b5e26ae615ef956c181d /clang/lib/Basic/SourceManager.cpp | |
parent | 1888dc91ac872146d106de9f8ea73b9148c920ff (diff) | |
download | llvm-5ea78c4113f8d2c8be24152f2dd0cadaea352c9d.zip llvm-5ea78c4113f8d2c8be24152f2dd0cadaea352c9d.tar.gz llvm-5ea78c4113f8d2c8be24152f2dd0cadaea352c9d.tar.bz2 |
[clang] Update ModuleMap::getModuleMapFile* to use FileEntryRef
Update SourceManager::ContentCache::OrigEntry to keep the original
FileEntryRef, and use that to enable ModuleMap::getModuleMapFile* to
return the original FileEntryRef. This change should be NFC for
most users of SourceManager::ContentCache, but it could affect behaviour
for users of getNameAsRequested such as in compileModuleImpl. I have not
found a way to detect that difference without additional functional
changes, other than incidental cases like changes from / to \ on
Windows so there is no new test.
Differential Revision: https://reviews.llvm.org/D135220
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 7131b50c..de217a9 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -399,8 +399,7 @@ ContentCache &SourceManager::getOrCreateContentCache(FileEntryRef FileEnt, if (OverriddenFilesInfo) { // If the file contents are overridden with contents from another file, // pass that file to ContentCache. - llvm::DenseMap<const FileEntry *, const FileEntry *>::iterator - overI = OverriddenFilesInfo->OverriddenFiles.find(FileEnt); + auto overI = OverriddenFilesInfo->OverriddenFiles.find(FileEnt); if (overI == OverriddenFilesInfo->OverriddenFiles.end()) new (Entry) ContentCache(FileEnt); else @@ -695,14 +694,18 @@ void SourceManager::overrideFileContents( } void SourceManager::overrideFileContents(const FileEntry *SourceFile, - const FileEntry *NewFile) { - assert(SourceFile->getSize() == NewFile->getSize() && + FileEntryRef NewFile) { + assert(SourceFile->getSize() == NewFile.getSize() && "Different sizes, use the FileManager to create a virtual file with " "the correct size"); assert(FileInfos.count(SourceFile) == 0 && "This function should be called at the initialization stage, before " "any parsing occurs."); - getOverriddenFilesInfo().OverriddenFiles[SourceFile] = NewFile; + // FileEntryRef is not default-constructible. + auto Pair = getOverriddenFilesInfo().OverriddenFiles.insert( + std::make_pair(SourceFile, NewFile)); + if (!Pair.second) + Pair.first->second = NewFile; } Optional<FileEntryRef> |