diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-04-07 20:37:06 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-04-07 20:37:06 +0000 |
| commit | dec49e77e569035a0e76cb9fca6cd2e1c0e06c17 (patch) | |
| tree | bec3d2530bf1a3569e07c09a84d48efe133fc3fb /clang | |
| parent | fd27fed58462229be261321c377146c045ad66ab (diff) | |
| download | bcm5719-llvm-dec49e77e569035a0e76cb9fca6cd2e1c0e06c17.tar.gz bcm5719-llvm-dec49e77e569035a0e76cb9fca6cd2e1c0e06c17.zip | |
add clang -cc1 level support for "-ferror-limit 42"
llvm-svn: 100687
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Basic/Diagnostic.h | 6 | ||||
| -rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 2 | ||||
| -rw-r--r-- | clang/include/clang/Frontend/DiagnosticOptions.h | 3 | ||||
| -rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 5 | ||||
| -rw-r--r-- | clang/lib/Frontend/Warnings.cpp | 4 |
6 files changed, 19 insertions, 5 deletions
diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index 8eb68a396a3..e0889659960 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -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. diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index 124288a7630..93cf495b528 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -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">, diff --git a/clang/include/clang/Frontend/DiagnosticOptions.h b/clang/include/clang/Frontend/DiagnosticOptions.h index b37c18057f0..d8ec14f9a3f 100644 --- a/clang/include/clang/Frontend/DiagnosticOptions.h +++ b/clang/include/clang/Frontend/DiagnosticOptions.h @@ -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; } }; diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index 388875cf631..738c27ccae7 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -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); } diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index dc2c6bf3614..b9afcb5cfa6 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -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) { diff --git a/clang/lib/Frontend/Warnings.cpp b/clang/lib/Frontend/Warnings.cpp index ea9635e7984..39cda8783b4 100644 --- a/clang/lib/Frontend/Warnings.cpp +++ b/clang/lib/Frontend/Warnings.cpp @@ -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 |

