aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/error.c
diff options
context:
space:
mode:
authorBrooks Moses <brooks.moses@codesourcery.com>2006-11-09 06:53:05 +0000
committerBrooks Moses <brooks@gcc.gnu.org>2006-11-08 22:53:05 -0800
commit3f139fcf2aa9cec8de6a5d03c867148dc8b049c9 (patch)
treeaf8c557eb4fa405e1872a03c58213c649a3c9621 /gcc/fortran/error.c
parent350ff03fa9c59261d4cc901454e367a6c77cb1c1 (diff)
downloadgcc-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/fortran/error.c')
-rw-r--r--gcc/fortran/error.c54
1 files changed, 36 insertions, 18 deletions
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);
}