OSDN Git Service

* lang.opt: Add -fmax-errors= option.
authorbrooks <brooks@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Nov 2006 06:53:05 +0000 (06:53 +0000)
committerbrooks <brooks@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Nov 2006 06:53:05 +0000 (06:53 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118615 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/fortran/gfortran.h
gcc/fortran/lang.opt
gcc/fortran/options.c

index 44224a2..7acfbd9 100644 (file)
@@ -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.
index ade361a..223fb59 100644 (file)
@@ -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);
     }
index 76f0d9f..40dbbe1 100644 (file)
@@ -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;
index 1a19da4..c055f14 100644 (file)
@@ -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
index d5920e4..ef44ae5 100644 (file)
@@ -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;