diff options
author | Brooks Moses <brooks.moses@codesourcery.com> | 2006-11-09 06:53:05 +0000 |
---|---|---|
committer | Brooks Moses <brooks@gcc.gnu.org> | 2006-11-08 22:53:05 -0800 |
commit | 3f139fcf2aa9cec8de6a5d03c867148dc8b049c9 (patch) | |
tree | af8c557eb4fa405e1872a03c58213c649a3c9621 /gcc | |
parent | 350ff03fa9c59261d4cc901454e367a6c77cb1c1 (diff) | |
download | gcc-3f139fcf2aa9cec8de6a5d03c867148dc8b049c9.zip gcc-3f139fcf2aa9cec8de6a5d03c867148dc8b049c9.tar.gz gcc-3f139fcf2aa9cec8de6a5d03c867148dc8b049c9.tar.bz2 |
lang.opt: Add -fmax-errors= option.
* lang.opt: Add -fmax-errors= option.
* gfortran.h (gfc_option_t): Add max_errors element.
* options.c (gfc_init_options): Set max_errors default value
to 25.
(gfc_handle_options): Assign -fmax_errors value to
gfc_option.max_errors.
* error.c (gfc_increment_error_count): New function, which
also checks whether the error count exceeds max_errors.
(gfc_warning): Use it.
(gfc_warning_now): Use it.
(gfc_notify_std): Use it.
(gfc_error): Use it.
(gfc_error_now): Use it.
(gfc_error_check): Use it.
From-SVN: r118615
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/fortran/error.c | 54 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 1 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 4 | ||||
-rw-r--r-- | gcc/fortran/options.c | 5 |
5 files changed, 63 insertions, 18 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 44224a2..7acfbd9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,22 @@ 2006-11-08 Brooks Moses <brooks.moses@codesourcery.com> + * lang.opt: Add -fmax-errors= option. + * gfortran.h (gfc_option_t): Add max_errors element. + * options.c (gfc_init_options): Set max_errors default value + to 25. + (gfc_handle_options): Assign -fmax_errors value to + gfc_option.max_errors. + * error.c (gfc_increment_error_count): New function, which + also checks whether the error count exceeds max_errors. + (gfc_warning): Use it. + (gfc_warning_now): Use it. + (gfc_notify_std): Use it. + (gfc_error): Use it. + (gfc_error_now): Use it. + (gfc_error_check): Use it. + +2006-11-08 Brooks Moses <brooks.moses@codesourcery.com> + * lang.opt: Remove non-working -qkind= option. * gfortran.h (gfc_option_t): Remove q_kind member. * options.c (gfc_init_options): Remove q_kind initialization. diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index ade361a..223fb59 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -460,6 +460,18 @@ error_printf (const char *nocmsgid, ...) } +/* Increment the number of errors, and check whether too many have + been printed. */ + +static void +gfc_increment_error_count (void) +{ + errors++; + if ((gfc_option.max_errors != 0) && (errors >= gfc_option.max_errors)) + gfc_fatal_error ("Error count reached limit of %d.", gfc_option.max_errors); +} + + /* Issue a warning. */ void @@ -475,17 +487,17 @@ gfc_warning (const char *nocmsgid, ...) cur_error_buffer = &warning_buffer; va_start (argp, nocmsgid); + error_print (_("Warning:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + if (buffer_flag == 0) { warnings++; if (warnings_are_errors) - errors++; + gfc_increment_error_count(); } - - error_print (_("Warning:"), _(nocmsgid), argp); - va_end (argp); - - error_char ('\0'); } @@ -530,13 +542,6 @@ gfc_notify_std (int std, const char *nocmsgid, ...) cur_error_buffer->flag = 1; cur_error_buffer->index = 0; - if (buffer_flag == 0) - { - if (warning && !warnings_are_errors) - warnings++; - else - errors++; - } va_start (argp, nocmsgid); if (warning) error_print (_("Warning:"), _(nocmsgid), argp); @@ -545,6 +550,15 @@ gfc_notify_std (int std, const char *nocmsgid, ...) va_end (argp); error_char ('\0'); + + if (buffer_flag == 0) + { + if (warning && !warnings_are_errors) + warnings++; + else + gfc_increment_error_count(); + } + return (warning && !warnings_are_errors) ? SUCCESS : FAILURE; } @@ -564,7 +578,7 @@ gfc_warning_now (const char *nocmsgid, ...) buffer_flag = 0; warnings++; if (warnings_are_errors) - errors++; + gfc_increment_error_count(); va_start (argp, nocmsgid); error_print (_("Warning:"), _(nocmsgid), argp); @@ -615,12 +629,13 @@ gfc_error (const char *nocmsgid, ...) cur_error_buffer = &error_buffer; va_start (argp, nocmsgid); - if (buffer_flag == 0) - errors++; error_print (_("Error:"), _(nocmsgid), argp); va_end (argp); error_char ('\0'); + + if (buffer_flag == 0) + gfc_increment_error_count(); } @@ -638,13 +653,15 @@ gfc_error_now (const char *nocmsgid, ...) i = buffer_flag; buffer_flag = 0; - errors++; va_start (argp, nocmsgid); error_print (_("Error:"), _(nocmsgid), argp); va_end (argp); error_char ('\0'); + + gfc_increment_error_count(); + buffer_flag = i; if (flag_fatal_errors) @@ -720,11 +737,12 @@ gfc_error_check (void) if (error_buffer.flag) { - errors++; if (error_buffer.message != NULL) fputs (error_buffer.message, stderr); error_buffer.flag = 0; + gfc_increment_error_count(); + if (flag_fatal_errors) exit (1); } diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 76f0d9f..40dbbe1 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1629,6 +1629,7 @@ typedef struct int warn_surprising; int warn_tabs; int warn_underflow; + int max_errors; int flag_all_intrinsics; int flag_default_double; diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 1a19da4..c055f14 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -169,6 +169,10 @@ ffree-line-length- Fortran RejectNegative Joined UInteger -ffree-line-length-<n> Use n as character line width in free mode +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 diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index d5920e4..ef44ae5 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -61,6 +61,7 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED, gfc_option.warn_surprising = 0; gfc_option.warn_tabs = 1; gfc_option.warn_underflow = 1; + gfc_option.max_errors = 25; gfc_option.flag_all_intrinsics = 0; gfc_option.flag_default_double = 0; @@ -512,6 +513,10 @@ gfc_handle_option (size_t scode, const char *arg, int value) gfc_option.flag_implicit_none = value; 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; |