diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-06 04:16:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-06 04:16:02 +0000 |
commit | 15221422eda7bac679e38b07512feda49715ef66 (patch) | |
tree | 3869dcbdd39667510b9629d44bc2d5a89cc952fc | |
parent | 41327585e4937bad8f9db485a506ea45223caeac (diff) |
don't emit any diagnostics after a fatal one.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63914 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/Diagnostic.h | 6 | ||||
-rw-r--r-- | lib/Basic/Diagnostic.cpp | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index 90b9e2ca31..4ab47d0be0 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -102,9 +102,10 @@ private: /// packed into four bits per diagnostic. unsigned char DiagMappings[diag::DIAG_UPPER_LIMIT/2]; - /// ErrorOccurred - This is set to true when an error is emitted, and is - /// sticky. + /// ErrorOccurred / FatalErrorOccurred - This is set to true when an error or + /// fatal error is emitted, and is sticky. bool ErrorOccurred; + bool FatalErrorOccurred; unsigned NumDiagnostics; // Number of diagnostics reported unsigned NumErrors; // Number of diagnostics that are errors @@ -179,6 +180,7 @@ public: } bool hasErrorOccurred() const { return ErrorOccurred; } + bool hasFatalErrorOccurred() const { return FatalErrorOccurred; } unsigned getNumErrors() const { return NumErrors; } unsigned getNumDiagnostics() const { return NumDiagnostics; } diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp index ae23278f6c..ff110711f5 100644 --- a/lib/Basic/Diagnostic.cpp +++ b/lib/Basic/Diagnostic.cpp @@ -191,6 +191,7 @@ Diagnostic::Diagnostic(DiagnosticClient *client) : Client(client) { memset(DiagMappings, 0, sizeof(DiagMappings)); ErrorOccurred = false; + FatalErrorOccurred = false; NumDiagnostics = 0; NumErrors = 0; CustomDiagInfo = 0; @@ -300,6 +301,11 @@ Diagnostic::Level Diagnostic::getDiagnosticLevel(unsigned DiagID) const { void Diagnostic::ProcessDiag() { DiagnosticInfo Info(this); + // If a fatal error has already been emitted, silence all subsequent + // diagnostics. + if (FatalErrorOccurred) + return; + // Figure out the diagnostic level of this message. Diagnostic::Level DiagLevel = getDiagnosticLevel(Info.getID()); @@ -320,8 +326,10 @@ void Diagnostic::ProcessDiag() { if (DiagLevel >= Diagnostic::Error) { ErrorOccurred = true; - ++NumErrors; + + if (DiagLevel == Diagnostic::Fatal) + FatalErrorOccurred = true; } // Finally, report it. |