SourceLocation LocEnd = Semicolon->getEndLoc();
FileID FID = SM.getFileID(LocEnd);
- const llvm::MemoryBuffer *Buffer = SM.getBuffer(FID, LocEnd);
+ llvm::MemoryBufferRef Buffer = SM.getBufferOrFake(FID, LocEnd);
Lexer Lexer(SM.getLocForStartOfFile(FID), Ctxt.getLangOpts(),
- Buffer->getBufferStart(), SM.getCharacterData(LocEnd) + 1,
- Buffer->getBufferEnd());
+ Buffer.getBufferStart(), SM.getCharacterData(LocEnd) + 1,
+ Buffer.getBufferEnd());
if (Lexer.LexFromRawLexer(Token))
return;
SM.getDecomposedLoc(SM.getExpansionLoc(Lsr.getBegin()));
std::pair<FileID, unsigned> RsrLocInfo =
SM.getDecomposedLoc(SM.getExpansionLoc(Rsr.getBegin()));
- const llvm::MemoryBuffer *MB = SM.getBuffer(LsrLocInfo.first);
+ llvm::MemoryBufferRef MB = SM.getBufferOrFake(LsrLocInfo.first);
- const char *LTokenPos = MB->getBufferStart() + LsrLocInfo.second;
- const char *RTokenPos = MB->getBufferStart() + RsrLocInfo.second;
+ const char *LTokenPos = MB.getBufferStart() + LsrLocInfo.second;
+ const char *RTokenPos = MB.getBufferStart() + RsrLocInfo.second;
Lexer LRawLex(SM.getLocForStartOfFile(LsrLocInfo.first), LO,
- MB->getBufferStart(), LTokenPos, MB->getBufferEnd());
+ MB.getBufferStart(), LTokenPos, MB.getBufferEnd());
Lexer RRawLex(SM.getLocForStartOfFile(RsrLocInfo.first), LO,
- MB->getBufferStart(), RTokenPos, MB->getBufferEnd());
+ MB.getBufferStart(), RTokenPos, MB.getBufferEnd());
Token LTok, RTok;
do { // Compare the expressions token-by-token.
const LangOptions &Opts = ASTCtx->getLangOpts();
const SourceManager &SM = ASTCtx->getSourceManager();
- const llvm::MemoryBuffer *Buffer = SM.getBuffer(SM.getFileID(AssertLoc));
+ llvm::Optional<llvm::MemoryBufferRef> Buffer =
+ SM.getBufferOrNone(SM.getFileID(AssertLoc));
if (!Buffer)
return SourceLocation();
return false;
const StringRef BufferIdentifier =
- SourceManager->getBuffer(FileOffset.first)->getBufferIdentifier();
+ SourceManager->getBufferOrFake(FileOffset.first).getBufferIdentifier();
return BufferIdentifier.empty();
}
SrcMgr::CharacteristicKind Kind, FileID PrevFID) override {
// It'd be nice if there was a better way to identify built-in headers...
if (Reason == FileChangeReason::ExitFile &&
- SM.getBuffer(PrevFID)->getBufferIdentifier() == "<built-in>")
+ SM.getBufferOrFake(PrevFID).getBufferIdentifier() == "<built-in>")
replay();
}
TokRef = TokRef.drop_front(Conflicting.size());
}
const auto &SM = AST.getSourceManager();
- StringRef MainCode = SM.getBuffer(SM.getMainFileID())->getBuffer();
+ StringRef MainCode = SM.getBufferOrFake(SM.getMainFileID()).getBuffer();
// Merge token stream with "inactive line" markers.
std::vector<HighlightingToken> WithInactiveLines;
llvm::StringRef toSourceCode(const SourceManager &SM, SourceRange R) {
assert(isValidFileRange(SM, R));
- bool Invalid = false;
- auto *Buf = SM.getBuffer(SM.getFileID(R.getBegin()), &Invalid);
- assert(!Invalid);
+ auto Buf = SM.getBufferOrNone(SM.getFileID(R.getBegin()));
+ assert(Buf);
size_t BeginOffset = SM.getFileOffset(R.getBegin());
size_t EndOffset = SM.getFileOffset(R.getEnd());
llvm::Expected<SourceLocation> sourceLocationInMainFile(const SourceManager &SM,
Position P) {
- llvm::StringRef Code = SM.getBuffer(SM.getMainFileID())->getBuffer();
+ llvm::StringRef Code = SM.getBufferOrFake(SM.getMainFileID()).getBuffer();
auto Offset =
positionToOffset(Code, P, /*AllowColumnBeyondLineLength=*/false);
if (!Offset)
// Retrieve source line from file image given a location.
static std::string getSourceLine(clang::Preprocessor &PP,
clang::SourceLocation Loc) {
- const llvm::MemoryBuffer *MemBuffer =
- PP.getSourceManager().getBuffer(PP.getSourceManager().getFileID(Loc));
- const char *Buffer = MemBuffer->getBufferStart();
- const char *BufferEnd = MemBuffer->getBufferEnd();
+ llvm::MemoryBufferRef MemBuffer = PP.getSourceManager().getBufferOrFake(
+ PP.getSourceManager().getFileID(Loc));
+ const char *Buffer = MemBuffer.getBufferStart();
+ const char *BufferEnd = MemBuffer.getBufferEnd();
const char *BeginPtr = PP.getSourceManager().getCharacterData(Loc);
const char *EndPtr = BeginPtr;
while (BeginPtr > Buffer) {
// Retrieve source line from file image given a file ID and line number.
static std::string getSourceLine(clang::Preprocessor &PP, clang::FileID FileID,
int Line) {
- const llvm::MemoryBuffer *MemBuffer = PP.getSourceManager().getBuffer(FileID);
- const char *Buffer = MemBuffer->getBufferStart();
- const char *BufferEnd = MemBuffer->getBufferEnd();
+ llvm::MemoryBufferRef MemBuffer =
+ PP.getSourceManager().getBufferOrFake(FileID);
+ const char *Buffer = MemBuffer.getBufferStart();
+ const char *BufferEnd = MemBuffer.getBufferEnd();
const char *BeginPtr = Buffer;
const char *EndPtr = BufferEnd;
int LineCounter = 1;
unsigned Begin, End;
std::tie(Begin, End) = Tree.getSourceRangeOffsets(Node);
const SourceManager &SrcMgr = Tree.getASTContext().getSourceManager();
- auto Code = SrcMgr.getBuffer(SrcMgr.getMainFileID())->getBuffer();
+ auto Code = SrcMgr.getBufferOrFake(SrcMgr.getMainFileID()).getBuffer();
for (; Offset < Begin; ++Offset)
printHtml(OS, Code[Offset]);
OS << "<span id='" << MyTag << Id << "' "
unsigned LocColumn =
SM.getSpellingColumnNumber(Loc, /*Invalid=*/nullptr) - 1;
FileID FID = SM.getFileID(Loc);
- const llvm::MemoryBuffer *Buffer =
- SM.getBuffer(FID, Loc, /*Invalid=*/nullptr);
+ llvm::MemoryBufferRef Buffer = SM.getBufferOrFake(FID, Loc);
- assert(LocData >= Buffer->getBufferStart() &&
- LocData < Buffer->getBufferEnd());
+ assert(LocData >= Buffer.getBufferStart() &&
+ LocData < Buffer.getBufferEnd());
const char *LineBegin = LocData - LocColumn;
- assert(LineBegin >= Buffer->getBufferStart());
+ assert(LineBegin >= Buffer.getBufferStart());
const char *LineEnd = nullptr;
for (LineEnd = LineBegin; *LineEnd != '\n' && *LineEnd != '\r' &&
- LineEnd < Buffer->getBufferEnd();
+ LineEnd < Buffer.getBufferEnd();
++LineEnd)
;
const SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager();
FileID fid = SM.translateFile(static_cast<FileEntry *>(file));
- bool Invalid = true;
- const llvm::MemoryBuffer *buf = SM.getBuffer(fid, &Invalid);
- if (Invalid) {
+ llvm::Optional<llvm::MemoryBufferRef> buf = SM.getBufferOrNone(fid);
+ if (!buf) {
if (size)
*size = 0;
return nullptr;
// Make sure the imported buffer has the original contents.
SourceManager &ToSM = ToAST->getSourceManager();
FileID ImportedID = ToSM.getFileID(ImportedLoc);
- EXPECT_EQ(Source, ToSM.getBuffer(ImportedID, SourceLocation())->getBuffer());
+ EXPECT_EQ(Source,
+ ToSM.getBufferOrFake(ImportedID, SourceLocation()).getBuffer());
}
TEST_P(ImportSourceLocations, OverwrittenFileBuffer) {
SourceManager &ToSM = ToAST->getSourceManager();
FileID ImportedID = ToSM.getFileID(ImportedLoc);
EXPECT_EQ(Contents,
- ToSM.getBuffer(ImportedID, SourceLocation())->getBuffer());
+ ToSM.getBufferOrFake(ImportedID, SourceLocation()).getBuffer());
}
TEST_P(ASTImporterOptionSpecificTestBase, ImportExprOfAlignmentAttr) {