@@ -525,6 +525,10 @@ c_common_handle_option (size_t scode, const char *arg, int value,
global_dc->warning_as_error_requested = value;
break;
+ case OPT_fmax_errors_:
+ global_dc->max_errors = value;
+ break;
+
case OPT_Wformat:
set_Wformat (value);
break;
@@ -821,6 +821,10 @@ flax-vector-conversions
C ObjC C++ ObjC++ Var(flag_lax_vector_conversions)
Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types.
+fmax-errors=
+C ObjC C++ ObjC++ Joined RejectNegative UInteger
+-fmax-errors=<number> Specify maximum number of errors to report
+
fms-extensions
C ObjC C++ ObjC++ Var(flag_ms_extensions)
Don't warn about uses of Microsoft extensions
@@ -109,6 +109,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
context->fatal_errors = false;
context->dc_inhibit_warnings = false;
context->dc_warn_system_headers = false;
+ context->max_errors = 0;
context->internal_error = NULL;
diagnostic_starter (context) = default_diagnostic_starter;
diagnostic_finalizer (context) = default_diagnostic_finalizer;
@@ -219,6 +220,17 @@ diagnostic_action_after_output (diagnostic_context *context,
diagnostic_finish (context);
exit (FATAL_EXIT_CODE);
}
+ if (context->max_errors != 0
+ && ((unsigned) (diagnostic_kind_count (context, DK_ERROR)
+ + diagnostic_kind_count (context, DK_SORRY))
+ >= context->max_errors))
+ {
+ fnotice (stderr,
+ "compilation terminated due to -fmax-errors=%u.\n",
+ context->max_errors);
+ diagnostic_finish (context);
+ exit (FATAL_EXIT_CODE);
+ }
break;
case DK_ICE:
@@ -128,6 +128,9 @@ struct diagnostic_context
/* True if warnings should be given in system headers. */
bool dc_warn_system_headers;
+ /* Maximum number of errors to report. */
+ unsigned int max_errors;
+
/* This function is called before any message is printed out. It is
responsible for preparing message prefix and such. For example, it
might say:
@@ -229,7 +229,8 @@ Objective-C and Objective-C++ Dialects}.
@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
-@gccoptlist{-fsyntax-only -pedantic -pedantic-errors @gol
+@gccoptlist{-fsyntax-only fmax-errors=@var{n} -pedantic @gol
+-pedantic-errors @gol
-w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol
-Wno-attributes -Wno-builtin-macro-redefined @gol
-Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol
@@ -2775,6 +2776,15 @@ warnings but control the kinds of diagnostics produced by GCC.
@opindex fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.
+@item -fmax-errors=@var{n}
+@opindex fmax-errors
+Limits the maximum number of error messages to @var{n}, at which point
+GCC bails out rather than attempting to continue processing the source
+code. If @var{n} is 0 (the default), there is no limit on the number
+of error messages produced. If @option{-Wfatal-errors} is also
+specified, then @option{-Wfatal-errors} takes precedence over this
+option.
+
@item -w
@opindex w
Inhibit all warning messages.
new file mode 100644
@@ -0,0 +1,11 @@
+/* PR c/44782 */
+/* { dg-do compile } */
+/* { dg-options "-fmax-errors=3" } */
+
+void foo (unsigned int i, unsigned int j)
+{
+ (i) (); /* { dg-error "" } */
+ (j) (); /* { dg-error "" } */
+ (i+j) (); /* { dg-error "" } */
+ (i*j) (); /* no error here due to -fmax-errors */
+} /* { dg-prune-output "compilation terminated" } */