Skip to content

Commit 8d67b9e

Browse files
committed
SourceManager: Migrate to FileEntryRef in getOrCreateContentCache, NFC
Change `SourceManager::getOrCreateContentCache` to take a `FileEntryRef` and update call sites (mostly internal to SourceManager.cpp). In a couple of cases this temporarily relies on `FileEntry::getLastRef`, but those can be cleaned up once other APIs switch over. The one change outside of SourceManager.cpp is in ASTReader.cpp, which stops relying on the auto-degrade-to-`FileEntry*` behaviour from `InputFile::getFile` since it now needs a `FileEntryRef`. No functionality change here. Differential Revision: https://reviews.llvm.org/D92983
1 parent 46b1645 commit 8d67b9e

File tree

3 files changed

+13
-16
lines changed

3 files changed

+13
-16
lines changed

clang/include/clang/Basic/SourceManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1838,7 +1838,7 @@ class SourceManager : public RefCountedBase<SourceManager> {
18381838
SrcMgr::CharacteristicKind DirCharacter, int LoadedID,
18391839
unsigned LoadedOffset);
18401840

1841-
SrcMgr::ContentCache &getOrCreateContentCache(const FileEntry *SourceFile,
1841+
SrcMgr::ContentCache &getOrCreateContentCache(FileEntryRef SourceFile,
18421842
bool isSystemFile = false);
18431843

18441844
/// Create a new ContentCache for the specified memory buffer.

clang/lib/Basic/SourceManager.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,8 @@ void SourceManager::initializeForReplay(const SourceManager &Old) {
385385
}
386386
}
387387

388-
ContentCache &SourceManager::getOrCreateContentCache(const FileEntry *FileEnt,
388+
ContentCache &SourceManager::getOrCreateContentCache(FileEntryRef FileEnt,
389389
bool isSystemFile) {
390-
assert(FileEnt && "Didn't specify a file entry to use?");
391-
392390
// Do we already have information about this file?
393391
ContentCache *&Entry = FileInfos[FileEnt];
394392
if (Entry)
@@ -414,7 +412,7 @@ ContentCache &SourceManager::getOrCreateContentCache(const FileEntry *FileEnt,
414412

415413
Entry->IsFileVolatile = UserFilesAreVolatile && !isSystemFile;
416414
Entry->IsTransient = FilesAreTransient;
417-
Entry->BufferOverridden |= FileEnt->isNamedPipe();
415+
Entry->BufferOverridden |= FileEnt.isNamedPipe();
418416

419417
return *Entry;
420418
}
@@ -542,7 +540,7 @@ FileID SourceManager::createFileID(FileEntryRef SourceFile,
542540
SourceLocation IncludePos,
543541
SrcMgr::CharacteristicKind FileCharacter,
544542
int LoadedID, unsigned LoadedOffset) {
545-
SrcMgr::ContentCache &IR = getOrCreateContentCache(&SourceFile.getFileEntry(),
543+
SrcMgr::ContentCache &IR = getOrCreateContentCache(SourceFile,
546544
isSystem(FileCharacter));
547545

548546
// If this is a named pipe, immediately load the buffer to ensure subsequent
@@ -682,13 +680,13 @@ SourceManager::createExpansionLocImpl(const ExpansionInfo &Info,
682680

683681
llvm::Optional<llvm::MemoryBufferRef>
684682
SourceManager::getMemoryBufferForFileOrNone(const FileEntry *File) {
685-
SrcMgr::ContentCache &IR = getOrCreateContentCache(File);
683+
SrcMgr::ContentCache &IR = getOrCreateContentCache(File->getLastRef());
686684
return IR.getBufferOrNone(Diag, getFileManager(), SourceLocation());
687685
}
688686

689687
void SourceManager::overrideFileContents(
690688
const FileEntry *SourceFile, std::unique_ptr<llvm::MemoryBuffer> Buffer) {
691-
SrcMgr::ContentCache &IR = getOrCreateContentCache(SourceFile);
689+
SrcMgr::ContentCache &IR = getOrCreateContentCache(SourceFile->getLastRef());
692690

693691
IR.setBuffer(std::move(Buffer));
694692
IR.BufferOverridden = true;
@@ -716,12 +714,12 @@ SourceManager::bypassFileContentsOverride(FileEntryRef File) {
716714
if (!BypassFile)
717715
return None;
718716

719-
(void)getOrCreateContentCache(&BypassFile->getFileEntry());
717+
(void)getOrCreateContentCache(*BypassFile);
720718
return BypassFile;
721719
}
722720

723721
void SourceManager::setFileIsTransient(const FileEntry *File) {
724-
getOrCreateContentCache(File).IsTransient = true;
722+
getOrCreateContentCache(File->getLastRef()).IsTransient = true;
725723
}
726724

727725
Optional<StringRef>

clang/lib/Serialization/ASTReader.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1499,7 +1499,7 @@ bool ASTReader::ReadSLocEntry(int ID) {
14991499
// we will also try to fail gracefully by setting up the SLocEntry.
15001500
unsigned InputID = Record[4];
15011501
InputFile IF = getInputFile(*F, InputID);
1502-
const FileEntry *File = IF.getFile();
1502+
Optional<FileEntryRef> File = IF.getFile();
15031503
bool OverriddenBuffer = IF.isOverridden();
15041504

15051505
// Note that we only check if a File was returned. If it was out-of-date
@@ -1515,9 +1515,8 @@ bool ASTReader::ReadSLocEntry(int ID) {
15151515
}
15161516
SrcMgr::CharacteristicKind
15171517
FileCharacter = (SrcMgr::CharacteristicKind)Record[2];
1518-
// FIXME: The FileID should be created from the FileEntryRef.
1519-
FileID FID = SourceMgr.createFileID(File, IncludeLoc, FileCharacter,
1520-
ID, BaseOffset + Record[0]);
1518+
FileID FID = SourceMgr.createFileID(*File, IncludeLoc, FileCharacter, ID,
1519+
BaseOffset + Record[0]);
15211520
SrcMgr::FileInfo &FileInfo =
15221521
const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile());
15231522
FileInfo.NumCreatedFIDs = Record[5];
@@ -1533,14 +1532,14 @@ bool ASTReader::ReadSLocEntry(int ID) {
15331532
}
15341533

15351534
const SrcMgr::ContentCache &ContentCache =
1536-
SourceMgr.getOrCreateContentCache(File, isSystem(FileCharacter));
1535+
SourceMgr.getOrCreateContentCache(*File, isSystem(FileCharacter));
15371536
if (OverriddenBuffer && !ContentCache.BufferOverridden &&
15381537
ContentCache.ContentsEntry == ContentCache.OrigEntry &&
15391538
!ContentCache.getBufferIfLoaded()) {
15401539
auto Buffer = ReadBuffer(SLocEntryCursor, File->getName());
15411540
if (!Buffer)
15421541
return true;
1543-
SourceMgr.overrideFileContents(File, std::move(Buffer));
1542+
SourceMgr.overrideFileContents(*File, std::move(Buffer));
15441543
}
15451544

15461545
break;

0 commit comments

Comments
 (0)