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>
* 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
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
Common Report Var(mem_report)
Report on permanent memory allocation

View File

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

View File

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

View File

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

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>
* 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
-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=
Fortran RejectNegative Joined UInteger
-fmax-identifier-length=<n> Maximum identifier length

View File

@ -273,6 +273,10 @@ gfc_post_options (const char **pfilename)
if (flag_compare_debug)
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. */
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;
break;
case OPT_fmax_errors_:
gfc_option.max_errors = value;
break;
case OPT_fmax_stack_var_size_:
gfc_option.flag_max_stack_var_size = value;
break;

View File

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