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;
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; }
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<
ErrorOccurred = false;
FatalErrorOccurred = false;
+ MaxErrorsEmitted = 0;
NumWarnings = 0;
NumErrors = 0;
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.