svn commit: r321719 - head/contrib/llvm/tools/clang/lib/Lex

Dimitry Andric dim at FreeBSD.org
Sun Jul 30 11:50:18 UTC 2017


Author: dim
Date: Sun Jul 30 11:50:16 2017
New Revision: 321719
URL: https://svnweb.freebsd.org/changeset/base/321719

Log:
  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

Modified:
  head/contrib/llvm/tools/clang/lib/Lex/ScratchBuffer.cpp

Modified: head/contrib/llvm/tools/clang/lib/Lex/ScratchBuffer.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Lex/ScratchBuffer.cpp	Sun Jul 30 10:49:13 2017	(r321718)
+++ head/contrib/llvm/tools/clang/lib/Lex/ScratchBuffer.cpp	Sun Jul 30 11:50:16 2017	(r321719)
@@ -35,6 +35,14 @@ SourceLocation ScratchBuffer::getToken(const char *Buf
                                        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.


More information about the svn-src-head mailing list