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 | |
| 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
| -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  | 

