Pull in r309503 from upstream clang trunk (by Richard Smith):
PR33902: Invalidate line number cache when adding more text to existing buffer. This led to crashes as the line number cache would report a bogus line number for a line of code, and we'd try to find a nonexistent column within the line when printing diagnostics. This fixes an assertion when building the graphics/champlain port. Reported by: antoine, kwm PR: 219139
This commit is contained in:
parent
c6ab5f700c
commit
49d63fb94e
@ -35,6 +35,14 @@ SourceLocation ScratchBuffer::getToken(const char *Buf, unsigned Len,
|
||||
const char *&DestPtr) {
|
||||
if (BytesUsed+Len+2 > ScratchBufSize)
|
||||
AllocScratchBuffer(Len+2);
|
||||
else {
|
||||
// Clear out the source line cache if it's already been computed.
|
||||
// FIXME: Allow this to be incrementally extended.
|
||||
auto *ContentCache = const_cast<SrcMgr::ContentCache *>(
|
||||
SourceMgr.getSLocEntry(SourceMgr.getFileID(BufferStartLoc))
|
||||
.getFile().getContentCache());
|
||||
ContentCache->SourceLineCache = nullptr;
|
||||
}
|
||||
|
||||
// Prefix the token with a \n, so that it looks like it is the first thing on
|
||||
// its own virtual line in caret diagnostics.
|
||||
|
Loading…
Reference in New Issue
Block a user