OSDN Git Service

* config/s390/s390.c (s390_emit_epilogue): Always restore registers
[pf3gnuchains/gcc-fork.git] / gcc / diagnostic.c
index e2f41fd..3e45e36 100644 (file)
@@ -34,6 +34,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "toplev.h"
 #include "intl.h"
 #include "diagnostic.h"
+#include "langhooks.h"
+#include "langhooks-def.h"
 
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free  free
@@ -101,9 +103,6 @@ extern int warnings_are_errors;
 static diagnostic_context global_diagnostic_context;
 diagnostic_context *global_dc = &global_diagnostic_context;
 
-/* This will be removed shortly.  */
-output_buffer *diagnostic_buffer = &global_diagnostic_context.buffer;
-
 /* Function of last error message;
    more generally, function such that if next error message is in it
    then we don't have to mention the function name.  */
@@ -112,12 +111,6 @@ static tree last_error_function = NULL;
 /* Used to detect when input_file_stack has changed since last described.  */
 static int last_error_tick;
 
-/* Called by report_error_function to print out function name.
-   Default may be overridden by language front-ends.  */
-
-void (*print_error_function) PARAMS ((diagnostic_context *, const char *))
-     = default_print_error_function;
-
 /* Prevent recursion into the error handler.  */
 static int diagnostic_lock;
 
@@ -181,7 +174,7 @@ int
 output_is_line_wrapping (buffer)
      output_buffer *buffer;
 {
-  return diagnostic_line_cutoff (buffer) > 0;
+  return output_line_cutoff (buffer) > 0;
 }
 
 /* Return BUFFER's prefix.  */
@@ -204,19 +197,19 @@ set_real_maximum_length (buffer)
    we'll emit prefix only once per diagnostic message, it is appropriate
   not to increase unnecessarily the line-length cut-off.  */
   if (! output_is_line_wrapping (buffer)
-      || diagnostic_prefixing_rule (buffer) == DIAGNOSTICS_SHOW_PREFIX_ONCE
-      || diagnostic_prefixing_rule (buffer) == DIAGNOSTICS_SHOW_PREFIX_NEVER)
-    line_wrap_cutoff (buffer) = diagnostic_line_cutoff (buffer);
+      || output_prefixing_rule (buffer) == DIAGNOSTICS_SHOW_PREFIX_ONCE
+      || output_prefixing_rule (buffer) == DIAGNOSTICS_SHOW_PREFIX_NEVER)
+    line_wrap_cutoff (buffer) = output_line_cutoff (buffer);
   else
     {
       int prefix_length =
         output_prefix (buffer) ? strlen (output_prefix (buffer)) : 0;
       /* If the prefix is ridiculously too long, output at least
          32 characters.  */
-      if (diagnostic_line_cutoff (buffer) - prefix_length < 32)
-        line_wrap_cutoff (buffer) = diagnostic_line_cutoff (buffer) + 32;
+      if (output_line_cutoff (buffer) - prefix_length < 32)
+        line_wrap_cutoff (buffer) = output_line_cutoff (buffer) + 32;
       else
-        line_wrap_cutoff (buffer) = diagnostic_line_cutoff (buffer);
+        line_wrap_cutoff (buffer) = output_line_cutoff (buffer);
     }
 }
 
@@ -228,7 +221,7 @@ output_set_maximum_length (buffer, length)
      output_buffer *buffer;
      int length;
 {
-  diagnostic_line_cutoff (buffer) = length;
+  output_line_cutoff (buffer) = length;
   set_real_maximum_length (buffer);
 }
 
@@ -305,8 +298,8 @@ init_output_buffer (buffer, prefix, maximum_length)
   memset (buffer, 0, sizeof (output_buffer));
   obstack_init (&buffer->obstack);
   output_buffer_attached_stream (buffer) = stderr;
-  diagnostic_line_cutoff (buffer) = maximum_length;
-  diagnostic_prefixing_rule (buffer) = diagnostic_prefixing_rule (global_dc);
+  output_line_cutoff (buffer) = maximum_length;
+  output_prefixing_rule (buffer) = diagnostic_prefixing_rule (global_dc);
   output_set_prefix (buffer, prefix);
   output_text_length (buffer) = 0;
   clear_diagnostic_info (buffer);  
@@ -358,7 +351,7 @@ output_emit_prefix (buffer)
 {
   if (output_prefix (buffer) != NULL)
     {
-      switch (diagnostic_prefixing_rule (buffer))
+      switch (output_prefixing_rule (buffer))
         {
         default:
         case DIAGNOSTICS_SHOW_PREFIX_NEVER:
@@ -867,7 +860,7 @@ format_with_decl (buffer, decl)
   if (*p == '%')               /* Print the name.  */
     {
       const char *const n = (DECL_NAME (decl)
-                            ? (*decl_printable_name) (decl, 2)
+                            ? (*lang_hooks.decl_printable_name) (decl, 2)
                             : _("((anonymous))"));
       output_add_string (buffer, n);
       while (*p)
@@ -1075,7 +1068,7 @@ announce_function (decl)
       if (rtl_dump_and_exit)
        verbatim ("%s ", IDENTIFIER_POINTER (DECL_NAME (decl)));
       else
-        verbatim (" %s", (*decl_printable_name) (decl, 2));
+        verbatim (" %s", (*lang_hooks.decl_printable_name) (decl, 2));
       fflush (stderr);
       output_needs_newline (diagnostic_buffer) = 1;
       record_last_error_function ();
@@ -1086,7 +1079,7 @@ announce_function (decl)
    an error.  */
 
 void
-default_print_error_function (context, file)
+lhd_print_error_function (context, file)
      diagnostic_context *context;
      const char *file;
 {
@@ -1095,7 +1088,7 @@ default_print_error_function (context, file)
       char *prefix = file ? build_message_string ("%s: ", file) : NULL;
       output_state os;
 
-      os = output_buffer_state (context);
+      os = diagnostic_state (context);
       output_set_prefix ((output_buffer *) context, prefix);
       
       if (current_function_decl == NULL)
@@ -1105,17 +1098,17 @@ default_print_error_function (context, file)
          if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
             output_printf
               ((output_buffer *) context, "In member function `%s':",
-               (*decl_printable_name) (current_function_decl, 2));
+               (*lang_hooks.decl_printable_name) (current_function_decl, 2));
          else
             output_printf
               ((output_buffer *) context, "In function `%s':",
-               (*decl_printable_name) (current_function_decl, 2));
+               (*lang_hooks.decl_printable_name) (current_function_decl, 2));
        }
       output_add_newline ((output_buffer *) context);
 
       record_last_error_function ();
       output_buffer_to_stream ((output_buffer *) context);
-      output_buffer_state (context) = os;
+      diagnostic_state (context) = os;
       free ((char*) prefix);
     }
 }
@@ -1129,7 +1122,7 @@ report_error_function (file)
   const char *file ATTRIBUTE_UNUSED;
 {
   report_problematic_module ((output_buffer *) global_dc);
-  (*print_error_function) (global_dc, input_filename);
+  (*lang_hooks.print_error_function) (global_dc, input_filename);
 }
 
 void
@@ -1221,12 +1214,14 @@ internal_error VPARAMS ((const char *msgid, ...))
   if (diagnostic_lock)
     error_recursion ();
 
+#ifndef ENABLE_CHECKING
   if (errorcount > 0 || sorrycount > 0)
     {
       fnotice (stderr, "%s:%d: confused by earlier errors, bailing out\n",
               input_filename, lineno);
       exit (FATAL_EXIT_CODE);
     }
+#endif
 
   if (internal_error_function != 0)
     (*internal_error_function) (_(msgid), &ap);
@@ -1309,7 +1304,7 @@ output_do_verbatim (buffer, msgid, args_ptr)
 
   os = output_buffer_state (buffer);
   output_prefix (buffer) = NULL;
-  diagnostic_prefixing_rule (buffer) = DIAGNOSTICS_SHOW_PREFIX_NEVER;
+  output_prefixing_rule (buffer) = DIAGNOSTICS_SHOW_PREFIX_NEVER;
   output_buffer_text_cursor (buffer) = _(msgid);
   output_buffer_ptr_to_format_args (buffer) = args_ptr;
   output_set_maximum_length (buffer, 0);