]> granicus.if.org Git - clang/commitdiff
Fix an infinite loop in diagnostic printing.
authorDaniel Dunbar <daniel@zuster.org>
Sun, 3 May 2009 23:04:40 +0000 (23:04 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sun, 3 May 2009 23:04:40 +0000 (23:04 +0000)
 - 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

lib/Frontend/TextDiagnosticPrinter.cpp
test/Misc/message-length.c

index 62446f33007945dd88333a0bda852829efaa0b67..95171604d382449c551c32479d70c5588af23c92 100644 (file)
@@ -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
index 8e75776e2a6326bdd2b0f0577abbc69069f4197d..d659acc39d736aa6a65e223608fb144940037ea8 100644 (file)
@@ -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 {}