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:
dim 2017-07-30 11:50:16 +00:00
parent c6ab5f700c
commit 49d63fb94e

View File

@ -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.