[cfe-commits] r154981 - in /cfe/trunk: lib/Frontend/TextDiagnostic.cpp test/Misc/wnull-character.cpp

Seth Cantrell seth.cantrell at gmail.com
Thu Apr 26 17:17:12 PDT 2012


Okay, thanks. Without understanding exactly how the scratch buffer is used, it seems to me like the right solution is to make the scratch buffer or the source manager understand where the actual used portion of the buffer ends. I'll take a look and see if I can make that work or think of anything else.

I'm not sure I understand your comment about embedded newlines. A new line character constitutes the end of a line, and so can never be embedded inside a line. And emitSnippetAndCaret takes a SourceLocation and outputs in a diagnostic with just the line containing that source location.


On Apr 26, 2012, at 5:37 PM, Nico Weber wrote:

> Hi Seth,
> 
> On Tue, Apr 17, 2012 at 7:44 PM, Seth Cantrell <seth.cantrell at gmail.com> wrote:
>> Author: socantre
>> Date: Tue Apr 17 21:44:48 2012
>> New Revision: 154981
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=154981&view=rev
>> Log:
>> fix display of source lines with null characters
>> 
>> Added:
>>    cfe/trunk/test/Misc/wnull-character.cpp
>> Modified:
>>    cfe/trunk/lib/Frontend/TextDiagnostic.cpp
>> 
>> Modified: cfe/trunk/lib/Frontend/TextDiagnostic.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TextDiagnostic.cpp?rev=154981&r1=154980&r2=154981&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/TextDiagnostic.cpp (original)
>> +++ cfe/trunk/lib/Frontend/TextDiagnostic.cpp Tue Apr 17 21:44:48 2012
>> @@ -839,10 +839,13 @@
>> 
>>   // Get information about the buffer it points into.
>>   bool Invalid = false;
>> -  const char *BufStart = SM.getBufferData(FID, &Invalid).data();
>> +  StringRef BufData = SM.getBufferData(FID, &Invalid);
>>   if (Invalid)
>>     return;
>> 
>> +  const char *BufStart = BufData.data();
>> +  const char *BufEnd = BufStart + BufData.size();
>> +
>>   unsigned LineNo = SM.getLineNumber(FID, FileOffset);
>>   unsigned ColNo = SM.getColumnNumber(FID, FileOffset);
>>   unsigned CaretEndColNo
>> @@ -856,7 +859,7 @@
>>   // Compute the line end.  Scan forward from the error position to the end of
>>   // the line.
>>   const char *LineEnd = TokPtr;
>> -  while (*LineEnd != '\n' && *LineEnd != '\r' && *LineEnd != '\0')
>> +  while (*LineEnd != '\n' && *LineEnd != '\r' && LineEnd!=BufEnd)
> 
> this caused PR12674. I can't think of a good fix, so I'll revert this,
> with a test that shows what went wrong. Note that even with this CL,
> strings with embedded newline characters weren't printed correctly.
> 
> Nico
> 
>>     ++LineEnd;
>> 
>>   // FIXME: This shouldn't be necessary, but the CaretEndColNo can extend past
>> 
>> Added: cfe/trunk/test/Misc/wnull-character.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/wnull-character.cpp?rev=154981&view=auto
>> ==============================================================================
>> Binary files cfe/trunk/test/Misc/wnull-character.cpp (added) and cfe/trunk/test/Misc/wnull-character.cpp Tue Apr 17 21:44:48 2012 differ
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list