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.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to