[cfe-commits] r137851 - in /cfe/trunk: lib/Basic/DiagnosticIDs.cpp test/Misc/error-limit-multiple-notes.cpp test/Misc/error-limit.c

Douglas Gregor dgregor at apple.com
Wed Aug 17 12:13:00 PDT 2011


Author: dgregor
Date: Wed Aug 17 14:13:00 2011
New Revision: 137851

URL: http://llvm.org/viewvc/llvm-project?rev=137851&view=rev
Log:
Fix -ferror-limit= to properly emit notes following the last error
messages. Fi from David Blaikie, tests from Nikola Smiljanic!

Added:
    cfe/trunk/test/Misc/error-limit-multiple-notes.cpp   (with props)
    cfe/trunk/test/Misc/error-limit.c   (with props)
Modified:
    cfe/trunk/lib/Basic/DiagnosticIDs.cpp

Modified: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=137851&r1=137850&r2=137851&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp (original)
+++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp Wed Aug 17 14:13:00 2011
@@ -733,11 +733,13 @@
       ++Diag.NumErrors;
     }
 
-    // If we've emitted a lot of errors, emit a fatal error after it to stop a
-    // flood of bogus errors.
-    if (Diag.ErrorLimit && Diag.NumErrors >= Diag.ErrorLimit &&
-        DiagLevel == DiagnosticIDs::Error)
+    // If we've emitted a lot of errors, emit a fatal error instead of it to 
+    // stop a flood of bogus errors.
+    if (Diag.ErrorLimit && Diag.NumErrors > Diag.ErrorLimit &&
+        DiagLevel == DiagnosticIDs::Error) {
       Diag.SetDelayedDiagnostic(diag::fatal_too_many_errors);
+      return false;
+    }
   }
 
   // If we have any Fix-Its, make sure that all of the Fix-Its point into

Added: cfe/trunk/test/Misc/error-limit-multiple-notes.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/error-limit-multiple-notes.cpp?rev=137851&view=auto
==============================================================================
--- cfe/trunk/test/Misc/error-limit-multiple-notes.cpp (added)
+++ cfe/trunk/test/Misc/error-limit-multiple-notes.cpp Wed Aug 17 14:13:00 2011
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -ferror-limit 1 -fsyntax-only %s 2>&1 | FileCheck %s
+
+// error and three notes emitted
+void foo(int);
+void foo(double);
+void foo(int, int);
+
+int main()
+{
+    foo();
+}
+
+// error and note suppressed by error-limit
+struct s1{};
+struct s1{};
+
+// CHECK: 10:5: error: no matching function for call to 'foo'
+// CHECK: 6:6: note: candidate function not viable: requires 2 arguments, but 0 were provided
+// CHECK: 5:6: note: candidate function not viable: requires 1 argument, but 0 were provided
+// CHECK: 4:6: note: candidate function not viable: requires 1 argument, but 0 were provided
+// CHECK: fatal error: too many errors emitted, stopping now
+// CHECK-NOT: 15:8: error: redefinition of 's1'
+// CHECK-NOT: 14:8: note: previous definition is here

Propchange: cfe/trunk/test/Misc/error-limit-multiple-notes.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cfe/trunk/test/Misc/error-limit-multiple-notes.cpp
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cfe/trunk/test/Misc/error-limit-multiple-notes.cpp
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cfe/trunk/test/Misc/error-limit.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/error-limit.c?rev=137851&view=auto
==============================================================================
--- cfe/trunk/test/Misc/error-limit.c (added)
+++ cfe/trunk/test/Misc/error-limit.c Wed Aug 17 14:13:00 2011
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -ferror-limit 1 -fsyntax-only %s 2>&1 | FileCheck %s
+
+// error and note emitted
+struct s1{};
+struct s1{};
+
+// error and note suppressed by error-limit
+struct s2{};
+struct s2{};
+
+// CHECK: 5:8: error: redefinition of 's1'
+// CHECK: 4:8: note: previous definition is here
+// CHECK: fatal error: too many errors emitted, stopping now
+// CHECK-NOT: 9:8: error: redefinition of 's2'
+// CHECK-NOT: 8:8: note: previous definition is here

Propchange: cfe/trunk/test/Misc/error-limit.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cfe/trunk/test/Misc/error-limit.c
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cfe/trunk/test/Misc/error-limit.c
------------------------------------------------------------------------------
    svn:mime-type = text/plain





More information about the cfe-commits mailing list