We should take this fix for Clang 5. On 29 July 2017 at 23:31, Richard Smith via cfe-commits < cfe-commits@lists.llvm.org> wrote:
> Author: rsmith > Date: Sat Jul 29 23:31:29 2017 > New Revision: 309503 > > URL: http://llvm.org/viewvc/llvm-project?rev=309503&view=rev > Log: > 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. > > Modified: > cfe/trunk/lib/Lex/ScratchBuffer.cpp > cfe/trunk/test/Misc/caret-diags-multiline.cpp > > Modified: cfe/trunk/lib/Lex/ScratchBuffer.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/ > ScratchBuffer.cpp?rev=309503&r1=309502&r2=309503&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Lex/ScratchBuffer.cpp (original) > +++ cfe/trunk/lib/Lex/ScratchBuffer.cpp Sat Jul 29 23:31:29 2017 > @@ -35,6 +35,14 @@ SourceLocation ScratchBuffer::getToken(c > 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. > > Modified: cfe/trunk/test/Misc/caret-diags-multiline.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/ > caret-diags-multiline.cpp?rev=309503&r1=309502&r2=309503&view=diff > ============================================================ > ================== > --- cfe/trunk/test/Misc/caret-diags-multiline.cpp (original) > +++ cfe/trunk/test/Misc/caret-diags-multiline.cpp Sat Jul 29 23:31:29 2017 > @@ -232,3 +232,8 @@ void multiple_ranges(int a, int b) { > b > ); > } > + > +#define pr33902_a(b) #b > +#define pr33902_c(d) _Pragma(pr33902_a(d)) > +#define pr33902_e(f) pr33902_c(GCC warning #f) > +pr33902_e() pr33902_e() > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits