Skip to content

Commit 2dc7e0c

Browse files
committed
clang/Basic: Replace SourceManager::getMemoryBufferForFile, NFC
Replace `SourceManager::getMemoryBufferForFile`, which returned a dereferenceable `MemoryBuffer*` and had a `bool*Invalid` out parameter, with `getMemoryBufferForFileOrNone` (returning `Optional<MemoryBufferRef>`) and `getMemoryBufferForFileOrFake` (returning `MemoryBufferRef`). Differential Revision: https://reviews.llvm.org/D89429
1 parent e557b6a commit 2dc7e0c

File tree

5 files changed

+26
-21
lines changed

5 files changed

+26
-21
lines changed

clang/include/clang/Basic/SourceManager.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -901,10 +901,18 @@ class SourceManager : public RefCountedBase<SourceManager> {
901901

902902
/// Retrieve the memory buffer associated with the given file.
903903
///
904-
/// \param Invalid If non-NULL, will be set \c true if an error
905-
/// occurs while retrieving the memory buffer.
906-
const llvm::MemoryBuffer *getMemoryBufferForFile(const FileEntry *File,
907-
bool *Invalid = nullptr);
904+
/// Returns None if the buffer is not valid.
905+
llvm::Optional<llvm::MemoryBufferRef>
906+
getMemoryBufferForFileOrNone(const FileEntry *File);
907+
908+
/// Retrieve the memory buffer associated with the given file.
909+
///
910+
/// Returns a fake buffer if there isn't a real one.
911+
llvm::MemoryBufferRef getMemoryBufferForFileOrFake(const FileEntry *File) {
912+
if (auto B = getMemoryBufferForFileOrNone(File))
913+
return *B;
914+
return getFakeBufferForRecovery()->getMemBufferRef();
915+
}
908916

909917
/// Override the contents of the given source file by providing an
910918
/// already-allocated buffer.

clang/include/clang/Frontend/PrecompiledPreamble.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
namespace llvm {
2828
class MemoryBuffer;
29+
class MemoryBufferRef;
2930
namespace vfs {
3031
class FileSystem;
3132
}
@@ -216,7 +217,7 @@ class PrecompiledPreamble {
216217

217218
static PreambleFileHash createForFile(off_t Size, time_t ModTime);
218219
static PreambleFileHash
219-
createForMemoryBuffer(const llvm::MemoryBuffer *Buffer);
220+
createForMemoryBuffer(const llvm::MemoryBufferRef &Buffer);
220221

221222
friend bool operator==(const PreambleFileHash &LHS,
222223
const PreambleFileHash &RHS) {

clang/lib/Basic/SourceManager.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -701,14 +701,11 @@ SourceManager::createExpansionLocImpl(const ExpansionInfo &Info,
701701
return SourceLocation::getMacroLoc(NextLocalOffset - (TokLength + 1));
702702
}
703703

704-
const llvm::MemoryBuffer *
705-
SourceManager::getMemoryBufferForFile(const FileEntry *File, bool *Invalid) {
704+
llvm::Optional<llvm::MemoryBufferRef>
705+
SourceManager::getMemoryBufferForFileOrNone(const FileEntry *File) {
706706
const SrcMgr::ContentCache *IR = getOrCreateContentCache(File);
707707
assert(IR && "getOrCreateContentCache() cannot return NULL");
708-
auto *B = IR->getBufferPointer(Diag, getFileManager(), SourceLocation());
709-
if (Invalid)
710-
*Invalid = !B;
711-
return B ? B : getFakeBufferForRecovery();
708+
return IR->getBufferOrNone(Diag, getFileManager(), SourceLocation());
712709
}
713710

714711
void SourceManager::overrideFileContents(const FileEntry *SourceFile,

clang/lib/Frontend/PrecompiledPreamble.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,8 @@ llvm::ErrorOr<PrecompiledPreamble> PrecompiledPreamble::Build(
463463
PrecompiledPreamble::PreambleFileHash::createForFile(File->getSize(),
464464
ModTime);
465465
} else {
466-
const llvm::MemoryBuffer *Buffer = SourceMgr.getMemoryBufferForFile(File);
466+
llvm::MemoryBufferRef Buffer =
467+
SourceMgr.getMemoryBufferForFileOrFake(File);
467468
FilesInPreamble[File->getName()] =
468469
PrecompiledPreamble::PreambleFileHash::createForMemoryBuffer(Buffer);
469470
}
@@ -549,7 +550,7 @@ bool PrecompiledPreamble::CanReuse(const CompilerInvocation &Invocation,
549550
llvm::StringMap<PreambleFileHash> OverridenFileBuffers;
550551
for (const auto &RB : PreprocessorOpts.RemappedFileBuffers) {
551552
const PrecompiledPreamble::PreambleFileHash PreambleHash =
552-
PreambleFileHash::createForMemoryBuffer(RB.second);
553+
PreambleFileHash::createForMemoryBuffer(RB.second->getMemBufferRef());
553554
llvm::vfs::Status Status;
554555
if (moveOnNoError(VFS->status(RB.first), Status))
555556
OverriddenFiles[Status.getUniqueID()] = PreambleHash;
@@ -783,13 +784,13 @@ PrecompiledPreamble::PreambleFileHash::createForFile(off_t Size,
783784

784785
PrecompiledPreamble::PreambleFileHash
785786
PrecompiledPreamble::PreambleFileHash::createForMemoryBuffer(
786-
const llvm::MemoryBuffer *Buffer) {
787+
const llvm::MemoryBufferRef &Buffer) {
787788
PreambleFileHash Result;
788-
Result.Size = Buffer->getBufferSize();
789+
Result.Size = Buffer.getBufferSize();
789790
Result.ModTime = 0;
790791

791792
llvm::MD5 MD5Ctx;
792-
MD5Ctx.update(Buffer->getBuffer().data());
793+
MD5Ctx.update(Buffer.getBuffer().data());
793794
MD5Ctx.final(Result.MD5);
794795

795796
return Result;

clang/lib/Lex/Preprocessor.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -395,12 +395,10 @@ bool Preprocessor::SetCodeCompletionPoint(const FileEntry *File,
395395
assert(CompleteLine && CompleteColumn && "Starts from 1:1");
396396
assert(!CodeCompletionFile && "Already set");
397397

398-
using llvm::MemoryBuffer;
399-
400398
// Load the actual file's contents.
401-
bool Invalid = false;
402-
const MemoryBuffer *Buffer = SourceMgr.getMemoryBufferForFile(File, &Invalid);
403-
if (Invalid)
399+
Optional<llvm::MemoryBufferRef> Buffer =
400+
SourceMgr.getMemoryBufferForFileOrNone(File);
401+
if (!Buffer)
404402
return true;
405403

406404
// Find the byte position of the truncation point.

0 commit comments

Comments
 (0)