forked from OSchip/llvm-project
add clang -cc1 level support for "-ferror-limit 42"
llvm-svn: 100687
This commit is contained in:
parent
fd27fed584
commit
dec49e77e5
|
@ -188,7 +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.
|
||||
unsigned ErrorLimit; // Cap of # errors emitted, 0 -> no limit.
|
||||
ExtensionHandling ExtBehavior; // Map extensions onto warnings or errors?
|
||||
DiagnosticClient *Client;
|
||||
|
||||
|
@ -271,9 +271,9 @@ public:
|
|||
|
||||
void setClient(DiagnosticClient* client) { Client = client; }
|
||||
|
||||
/// setMaxErrorsEmitted - Specify a limit for the number of errors we should
|
||||
/// setErrorLimit - Specify a limit for the number of errors we should
|
||||
/// emit before giving up. Zero disables the limit.
|
||||
void setMaxErrorsEmitted(unsigned Limit) { MaxErrorsEmitted = Limit; }
|
||||
void setErrorLimit(unsigned Limit) { ErrorLimit = Limit; }
|
||||
|
||||
/// setIgnoreAllWarnings - When set to true, any unmapped warnings are
|
||||
/// ignored. If this and WarningsAsErrors are both set, then this one wins.
|
||||
|
|
|
@ -192,6 +192,8 @@ def fdiagnostics_show_option : Flag<"-fdiagnostics-show-option">,
|
|||
HelpText<"Print diagnostic name with mappable diagnostics">;
|
||||
def ftabstop : Separate<"-ftabstop">, MetaVarName<"<N>">,
|
||||
HelpText<"Set the tab stop distance.">;
|
||||
def ferror_limit : Separate<"-ferror-limit">, MetaVarName<"<N>">,
|
||||
HelpText<"Set the maximum number of errors to emit before stopping (0 = no limit).">;
|
||||
def fmessage_length : Separate<"-fmessage-length">, MetaVarName<"<N>">,
|
||||
HelpText<"Format message diagnostics so that they fit within N columns or fewer, when possible.">;
|
||||
def fcolor_diagnostics : Flag<"-fcolor-diagnostics">,
|
||||
|
|
|
@ -38,6 +38,8 @@ public:
|
|||
/// binary serialization mechanism, to be
|
||||
/// deserialized by, e.g., the CIndex library.
|
||||
|
||||
unsigned ErrorLimit; /// Limit # errors emitted.
|
||||
|
||||
/// The distance between tab stops.
|
||||
unsigned TabStop;
|
||||
enum { DefaultTabStop = 8, MaxTabStop = 100 };
|
||||
|
@ -70,6 +72,7 @@ public:
|
|||
ShowSourceRanges = 0;
|
||||
VerifyDiagnostics = 0;
|
||||
BinaryOutput = 0;
|
||||
ErrorLimit = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -223,7 +223,7 @@ Diagnostic::Diagnostic(DiagnosticClient *client) : Client(client) {
|
|||
|
||||
ErrorOccurred = false;
|
||||
FatalErrorOccurred = false;
|
||||
MaxErrorsEmitted = 0;
|
||||
ErrorLimit = 0;
|
||||
|
||||
NumWarnings = 0;
|
||||
NumErrors = 0;
|
||||
|
@ -555,7 +555,7 @@ bool Diagnostic::ProcessDiag() {
|
|||
|
||||
// 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 &&
|
||||
if (ErrorLimit && NumErrors >= ErrorLimit &&
|
||||
DiagLevel == Diagnostic::Error)
|
||||
SetDelayedDiagnostic(diag::fatal_too_many_errors);
|
||||
}
|
||||
|
|
|
@ -232,6 +232,10 @@ static void DiagnosticOptsToArgs(const DiagnosticOptions &Opts,
|
|||
Res.push_back("-fdiagnostics-binary");
|
||||
if (Opts.ShowOptionNames)
|
||||
Res.push_back("-fdiagnostics-show-option");
|
||||
if (Opts.ErrorLimit) {
|
||||
Res.push_back("-ferror-limit");
|
||||
Res.push_back(llvm::utostr(Opts.ErrorLimit));
|
||||
}
|
||||
if (Opts.TabStop != DiagnosticOptions::DefaultTabStop) {
|
||||
Res.push_back("-ftabstop");
|
||||
Res.push_back(llvm::utostr(Opts.TabStop));
|
||||
|
@ -830,6 +834,7 @@ static void ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
|
|||
Opts.ShowSourceRanges = Args.hasArg(OPT_fdiagnostics_print_source_range_info);
|
||||
Opts.VerifyDiagnostics = Args.hasArg(OPT_verify);
|
||||
Opts.BinaryOutput = Args.hasArg(OPT_fdiagnostics_binary);
|
||||
Opts.ErrorLimit = getLastArgIntValue(Args, OPT_ferror_limit, 0, Diags);
|
||||
Opts.TabStop = getLastArgIntValue(Args, OPT_ftabstop,
|
||||
DiagnosticOptions::DefaultTabStop, Diags);
|
||||
if (Opts.TabStop == 0 || Opts.TabStop > DiagnosticOptions::MaxTabStop) {
|
||||
|
|
|
@ -35,6 +35,10 @@ void clang::ProcessWarningOptions(Diagnostic &Diags,
|
|||
const DiagnosticOptions &Opts) {
|
||||
Diags.setSuppressSystemWarnings(true); // Default to -Wno-system-headers
|
||||
Diags.setIgnoreAllWarnings(Opts.IgnoreWarnings);
|
||||
|
||||
// Handle -ferror-limit
|
||||
if (Opts.ErrorLimit)
|
||||
Diags.setErrorLimit(Opts.ErrorLimit);
|
||||
|
||||
// If -pedantic or -pedantic-errors was specified, then we want to map all
|
||||
// extension diagnostics onto WARNING or ERROR unless the user has futz'd
|
||||
|
|
Loading…
Reference in New Issue