re PR c/44782 (implement -ferror-limit=)

gcc/
	PR c/44782
	* common.opt (fmax-errors=): New option.
	* opts.c (common_handle_option) [OPT_fmax_errors_]: Handle it.
	* diagnostic.h (struct diagnostic_context): Add max_errors field.
	* diagnostic.c (diagnostic_initialize): Initialize it.
	(diagnostic_action_after_output): Exit if more than max_errors
	have been output.
	* doc/invoke.texi (Warning Options): Add -fmax-errors.
	(-fmax-errors): Document.

gcc/fortran/
	PR c/44782
	* options.c (gfc_post_options): Initialize gfc_option.max_errors.
	(gfc_handle_option) [OPT_fmax_errors_]: Remove.
	* lang.opt (fmax-errors=): Remove.

gcc/testsuite/
	PR c/44782
	* c-c++-common/fmax-errors.c: New test.

From-SVN: r166644
This commit is contained in:
Nathan Froyd 2010-11-12 03:38:15 +00:00 committed by Nathan Froyd
parent f03d897af3
commit 3a789837f5
11 changed files with 73 additions and 9 deletions

View File

@ -1,3 +1,15 @@
2010-11-11 Nathan Froyd <froydnj@codesourcery.com>
PR c/44782
* common.opt (fmax-errors=): New option.
* opts.c (common_handle_option) [OPT_fmax_errors_]: Handle it.
* diagnostic.h (struct diagnostic_context): Add max_errors field.
* diagnostic.c (diagnostic_initialize): Initialize it.
(diagnostic_action_after_output): Exit if more than max_errors
have been output.
* doc/invoke.texi (Warning Options): Add -fmax-errors.
(-fmax-errors): Document.
2010-11-11 Richard Henderson <rth@redhat.com> 2010-11-11 Richard Henderson <rth@redhat.com>
* optabs.c (init_optabs): Init {fma,fms,fnma,fnms}_optab properly. * optabs.c (init_optabs): Init {fma,fms,fnma,fnms}_optab properly.

View File

@ -1170,6 +1170,10 @@ fmath-errno
Common Report Var(flag_errno_math) Init(1) Optimization Common Report Var(flag_errno_math) Init(1) Optimization
Set errno after built-in math functions Set errno after built-in math functions
fmax-errors=
Common Joined RejectNegative UInteger Var(flag_max_errors)
-fmax-errors=<number> Maximum number of errors to report
fmem-report fmem-report
Common Report Var(mem_report) Common Report Var(mem_report)
Report on permanent memory allocation Report on permanent memory allocation

View File

@ -109,6 +109,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
context->fatal_errors = false; context->fatal_errors = false;
context->dc_inhibit_warnings = false; context->dc_inhibit_warnings = false;
context->dc_warn_system_headers = false; context->dc_warn_system_headers = false;
context->max_errors = 0;
context->internal_error = NULL; context->internal_error = NULL;
diagnostic_starter (context) = default_diagnostic_starter; diagnostic_starter (context) = default_diagnostic_starter;
diagnostic_finalizer (context) = default_diagnostic_finalizer; diagnostic_finalizer (context) = default_diagnostic_finalizer;
@ -219,6 +220,17 @@ diagnostic_action_after_output (diagnostic_context *context,
diagnostic_finish (context); diagnostic_finish (context);
exit (FATAL_EXIT_CODE); 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; break;
case DK_ICE: case DK_ICE:

View File

@ -128,6 +128,9 @@ struct diagnostic_context
/* True if warnings should be given in system headers. */ /* True if warnings should be given in system headers. */
bool dc_warn_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 /* This function is called before any message is printed out. It is
responsible for preparing message prefix and such. For example, it responsible for preparing message prefix and such. For example, it
might say: might say:

View File

@ -229,7 +229,8 @@ Objective-C and Objective-C++ Dialects}.
@item Warning Options @item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}. @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 -w -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds @gol
-Wno-attributes -Wno-builtin-macro-redefined @gol -Wno-attributes -Wno-builtin-macro-redefined @gol
-Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @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 @opindex fsyntax-only
Check the code for syntax errors, but don't do anything beyond that. 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 @item -w
@opindex w @opindex w
Inhibit all warning messages. Inhibit all warning messages.

View File

@ -1,3 +1,10 @@
2010-11-11 Nathan Froyd <froydnj@codesourcery.com>
PR c/44782
* options.c (gfc_post_options): Initialize gfc_option.max_errors.
(gfc_handle_option) [OPT_fmax_errors_]: Remove.
* lang.opt (fmax-errors=): Remove.
2010-11-11 Steven G. Kargl <kargl@gcc.gnu.org> 2010-11-11 Steven G. Kargl <kargl@gcc.gnu.org>
* symbol.c (verify_bind_c_derived_type): Accept BIND(C) on an empty * symbol.c (verify_bind_c_derived_type): Accept BIND(C) on an empty

View File

@ -438,10 +438,6 @@ fmax-array-constructor=
Fortran RejectNegative Joined UInteger Fortran RejectNegative Joined UInteger
-fmax-array-constructor=<n> Maximum number of objects in an array constructor -fmax-array-constructor=<n> Maximum number of objects in an array constructor
fmax-errors=
Fortran RejectNegative Joined UInteger
-fmax-errors=<n> Maximum number of errors to report
fmax-identifier-length= fmax-identifier-length=
Fortran RejectNegative Joined UInteger Fortran RejectNegative Joined UInteger
-fmax-identifier-length=<n> Maximum identifier length -fmax-identifier-length=<n> Maximum identifier length

View File

@ -273,6 +273,10 @@ gfc_post_options (const char **pfilename)
if (flag_compare_debug) if (flag_compare_debug)
gfc_option.dump_fortran_original = 0; gfc_option.dump_fortran_original = 0;
/* Make -fmax-errors visible to gfortran's diagnostic machinery. */
if (global_options_set.x_flag_max_errors)
gfc_option.max_errors = flag_max_errors;
/* Verify the input file name. */ /* Verify the input file name. */
if (!filename || strcmp (filename, "-") == 0) if (!filename || strcmp (filename, "-") == 0)
{ {
@ -760,10 +764,6 @@ gfc_handle_option (size_t scode, const char *arg, int value,
gfc_option.flag_max_array_constructor = value > 65535 ? value : 65535; gfc_option.flag_max_array_constructor = value > 65535 ? value : 65535;
break; break;
case OPT_fmax_errors_:
gfc_option.max_errors = value;
break;
case OPT_fmax_stack_var_size_: case OPT_fmax_stack_var_size_:
gfc_option.flag_max_stack_var_size = value; gfc_option.flag_max_stack_var_size = value;
break; break;

View File

@ -2155,6 +2155,10 @@ common_handle_option (struct gcc_options *opts,
dc->dc_inhibit_warnings = true; dc->dc_inhibit_warnings = true;
break; break;
case OPT_fmax_errors_:
dc->max_errors = value;
break;
case OPT_fuse_linker_plugin: case OPT_fuse_linker_plugin:
/* No-op. Used by the driver and passed to us because it starts with f.*/ /* No-op. Used by the driver and passed to us because it starts with f.*/
break; break;

View File

@ -1,3 +1,8 @@
2010-11-11 Nathan Froyd <froydnj@codesourcery.com>
PR c/44782
* c-c++-common/fmax-errors.c: New test.
2010-11-11 Richard Henderson <rth@redhat.com> 2010-11-11 Richard Henderson <rth@redhat.com>
* gcc.target/i386/sse-24.c: Use -ffp-contract. * gcc.target/i386/sse-24.c: Use -ffp-contract.

View File

@ -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" } */