diff options
author | Chris Lattner <sabre@nondot.org> | 2010-04-07 20:21:58 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-04-07 20:21:58 +0000 |
commit | 75a0393eb580106a4266285fb91e36343ee6cebd (patch) | |
tree | 4b993b44ffbd3b6d3d833bf1d54fb6ec938a3299 /clang | |
parent | 27c786bcf9f1b0d2e7f9b01c07604e4901e68dec (diff) | |
download | bcm5719-llvm-75a0393eb580106a4266285fb91e36343ee6cebd.tar.gz bcm5719-llvm-75a0393eb580106a4266285fb91e36343ee6cebd.zip |
add capabilities to stop emitting errors after some limit.
Right now the limit is 0 (aka disabled)
llvm-svn: 100684
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/Diagnostic.h | 5 | ||||
-rw-r--r-- | clang/include/clang/Basic/DiagnosticCommonKinds.td | 5 | ||||
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 7 |
3 files changed, 17 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index 9279871997c..8eb68a396a3 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -188,6 +188,7 @@ private: bool ErrorsAsFatal; // Treat errors like fatal errors. bool SuppressSystemWarnings; // Suppress warnings in system headers. bool SuppressAllDiagnostics; // Suppress all diagnostics. + unsigned MaxErrorsEmitted; // Cap of # errors emitted, 0 -> no limit. ExtensionHandling ExtBehavior; // Map extensions onto warnings or errors? DiagnosticClient *Client; @@ -270,6 +271,10 @@ public: void setClient(DiagnosticClient* client) { Client = client; } + /// setMaxErrorsEmitted - Specify a limit for the number of errors we should + /// emit before giving up. Zero disables the limit. + void setMaxErrorsEmitted(unsigned Limit) { MaxErrorsEmitted = Limit; } + /// setIgnoreAllWarnings - When set to true, any unmapped warnings are /// ignored. If this and WarningsAsErrors are both set, then this one wins. void setIgnoreAllWarnings(bool Val) { IgnoreAllWarnings = Val; } diff --git a/clang/include/clang/Basic/DiagnosticCommonKinds.td b/clang/include/clang/Basic/DiagnosticCommonKinds.td index 8e791c3422f..1402e96ce08 100644 --- a/clang/include/clang/Basic/DiagnosticCommonKinds.td +++ b/clang/include/clang/Basic/DiagnosticCommonKinds.td @@ -13,6 +13,11 @@ let Component = "Common" in { +// Basic. + +def fatal_too_many_errors + : Error<"too many errors emitted, stopping now">, DefaultFatal; + def note_previous_definition : Note<"previous definition is here">; def note_previous_declaration : Note<"previous declaration is here">; def note_previous_implicit_declaration : Note< diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index a1094ad95ca..388875cf631 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -223,6 +223,7 @@ Diagnostic::Diagnostic(DiagnosticClient *client) : Client(client) { ErrorOccurred = false; FatalErrorOccurred = false; + MaxErrorsEmitted = 0; NumWarnings = 0; NumErrors = 0; @@ -551,6 +552,12 @@ bool Diagnostic::ProcessDiag() { if (DiagLevel >= Diagnostic::Error) { ErrorOccurred = true; ++NumErrors; + + // If we've emitted a lot of errors, emit a fatal error after it to stop a + // flood of bogus errors. + if (MaxErrorsEmitted && NumErrors >= MaxErrorsEmitted && + DiagLevel == Diagnostic::Error) + SetDelayedDiagnostic(diag::fatal_too_many_errors); } // Finally, report it. |