From: Daniel Dunbar Date: Sun, 3 May 2009 23:04:40 +0000 (+0000) Subject: Fix an infinite loop in diagnostic printing. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1ef29d217ef9084bca57fe31e0d1541efa6d120a;p=clang Fix an infinite loop in diagnostic printing. - The diagnostic is still poor, however. Doug, can you investigate? - Improved the test case to not depend on the file name, now it can be extended to actually check the formatting of the diagnostics (I'm hoping grep -A is portable here). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70807 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/TextDiagnosticPrinter.cpp b/lib/Frontend/TextDiagnosticPrinter.cpp index 62446f3300..95171604d3 100644 --- a/lib/Frontend/TextDiagnosticPrinter.cpp +++ b/lib/Frontend/TextDiagnosticPrinter.cpp @@ -168,8 +168,7 @@ static void SelectInterestingSourceRegion(std::string &SourceLine, bool ExpandedRegion = false; // Move the start of the interesting region left until we've // pulled in something else interesting. - if (CaretStart && !StartIsFixed && - CaretEnd - CaretStart < TargetColumns) { + if (CaretStart && !StartIsFixed) { unsigned NewStart = CaretStart; bool BadStart = false; @@ -223,8 +222,7 @@ static void SelectInterestingSourceRegion(std::string &SourceLine, // Move the end of the interesting region right until we've // pulled in something else interesting. - if (CaretEnd != SourceLength && - CaretEnd - CaretStart < TargetColumns) { + if (CaretEnd != SourceLength) { unsigned NewEnd = CaretEnd; // Skip over any whitespace we see here; we're looking for @@ -240,10 +238,10 @@ static void SelectInterestingSourceRegion(std::string &SourceLine, CaretEnd = NewEnd; ExpandedRegion = true; } - - if (!ExpandedRegion) - break; } + + if (!ExpandedRegion) + break; } // [CaretStart, CaretEnd) is the slice we want. Update the various diff --git a/test/Misc/message-length.c b/test/Misc/message-length.c index 8e75776e2a..d659acc39d 100644 --- a/test/Misc/message-length.c +++ b/test/Misc/message-length.c @@ -1,4 +1,15 @@ -// RUN: clang -fsyntax-only -fmessage-length=72 %s +// RUN: clang -fsyntax-only -fmessage-length=72 %s 2> %t && + +// RUN: grep -A4 "FILE:23" %t > %t.msg && +// FIXME: This diagnostic is getting truncated very poorly. +// RUN: grep -e '^ ... ' %t.msg && +// RUN: grep -e '^ \^' %t.msg && + +// RUN: true + +// Hack so we can check things better, force the file name and line. + +# 1 "FILE" 1 /* It's tough to verify the results of this test mechanically, since the length of the filename (and, therefore, how the word-wrapping @@ -20,3 +31,5 @@ void a_very_long_line(int *ip, float *FloatPointer) { int array0[] = { [3] 3, 5, 7, 4, 2, 7, 6, 3, 4, 5, 6, 7, 8, 9, 12, 345, 14, 345, 789, 234, 678, 345, 123, 765, 234 }; } + +#pragma STDC CX_LIMITED_RANGE // some long comment text and a brace, eh {}