mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-23 06:09:26 +08:00
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:
parent
f03d897af3
commit
3a789837f5
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
11
gcc/testsuite/c-c++-common/fmax-errors.c
Normal file
11
gcc/testsuite/c-c++-common/fmax-errors.c
Normal 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" } */
|
Loading…
Reference in New Issue
Block a user