From c91ad6994fbc08a540079e53e4949718df0acf3d Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Thu, 13 Jul 2000 10:37:41 +0000 Subject: [PATCH] diagnostic.c (vline_wrapper_message_with_location, [...]): Remove. 2000-07-12 Gabriel Dos Reis * diagnostic.c (vline_wrapper_message_with_location, v_message_with_file_and_line, v_error_with_file_and_file, v_error_for_asm, v_warning_for_asm, vfatal, v_warning_with_file_and_line, v_pedwarn_with_file_and_line, vsorry, verror, vwarning, vpedwarn): Remove. (diagnostic_for_asm): New function. (pedwarn, error, warning, pedwarn_with_file_and_line, error_with_file_and_line, warning_with_file_and_line, sorry, error_for_asm, warning_for_asm, fatal): Reimplement. (finish_diagnostic): Clear diagnostic info as well. From-SVN: r35011 --- gcc/ChangeLog | 13 +++ gcc/diagnostic.c | 275 ++++++++++--------------------------------------------- 2 files changed, 62 insertions(+), 226 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff2140e..ed91cb7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2000-07-12 Gabriel Dos Reis + + * diagnostic.c (vline_wrapper_message_with_location, + v_message_with_file_and_line, v_error_with_file_and_file, + v_error_for_asm, v_warning_for_asm, vfatal, + v_warning_with_file_and_line, v_pedwarn_with_file_and_line, + vsorry, verror, vwarning, vpedwarn): Remove. + (diagnostic_for_asm): New function. + (pedwarn, error, warning, pedwarn_with_file_and_line, + error_with_file_and_line, warning_with_file_and_line, sorry, + error_for_asm, warning_for_asm, fatal): Reimplement. + (finish_diagnostic): Clear diagnostic info as well. + 2000-07-13 Neil Booth * c-common.h (flag_digraphs): New. diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 5a0c224..d354f81 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -77,30 +77,13 @@ static char *context_as_prefix PARAMS ((const char *, int, int)); static void output_do_printf PARAMS ((output_buffer *, const char *)); static void line_wrapper_printf PARAMS ((FILE *, const char *, ...)) ATTRIBUTE_PRINTF_2; -static void vline_wrapper_message_with_location PARAMS ((const char *, int, - int, const char *, - va_list)); static void notice PARAMS ((const char *s, ...)) ATTRIBUTE_PRINTF_1; -static void v_message_with_file_and_line PARAMS ((const char *, int, int, - const char *, va_list)); static void v_message_with_decl PARAMS ((tree, int, const char *, va_list)); static void file_and_line_for_asm PARAMS ((rtx, const char **, int *)); -static void v_error_with_file_and_line PARAMS ((const char *, int, - const char *, va_list)); +static void diagnostic_for_asm PARAMS ((rtx, const char *, va_list, int)); static void v_error_with_decl PARAMS ((tree, const char *, va_list)); -static void v_error_for_asm PARAMS ((rtx, const char *, va_list)); -static void vfatal PARAMS ((const char *, va_list)) ATTRIBUTE_NORETURN; -static void v_warning_with_file_and_line PARAMS ((const char *, int, - const char *, va_list)); static void v_warning_with_decl PARAMS ((tree, const char *, va_list)); -static void v_warning_for_asm PARAMS ((rtx, const char *, va_list)); static void v_pedwarn_with_decl PARAMS ((tree, const char *, va_list)); -static void v_pedwarn_with_file_and_line PARAMS ((const char *, int, - const char *, va_list)); -static void vsorry PARAMS ((const char *, va_list)); -static void verror PARAMS ((const char *, va_list)); -static void vwarning PARAMS ((const char *, va_list)); -static void vpedwarn PARAMS ((const char *, va_list)); static void report_file_and_line PARAMS ((const char *, int, int)); static void vnotice PARAMS ((FILE *, const char *, va_list)); static void set_real_maximum_length PARAMS ((output_buffer *)); @@ -834,27 +817,6 @@ line_wrapper_printf VPARAMS ((FILE *file, const char *msgid, ...)) va_end (ap); } - -static void -vline_wrapper_message_with_location (file, line, warn, msgid, ap) - const char *file; - int line; - int warn; - const char *msgid; - va_list ap; -{ - output_buffer buffer; - - init_output_buffer (&buffer, context_as_prefix (file, line, warn), - diagnostic_message_length_per_line); - output_buffer_ptr_to_format_args (&buffer) = ≈ - output_do_printf (&buffer, msgid); - output_to_stream (&buffer, stderr); - fputc ('\n', stderr); - output_destroy_prefix (&buffer); -} - - /* Print the message MSGID in FILE. */ static void @@ -903,21 +865,6 @@ report_file_and_line (file, line, warn) notice ("warning: "); } -/* Print a message relevant to line LINE of file FILE. */ - -static void -v_message_with_file_and_line (file, line, warn, msgid, ap) - const char *file; - int line; - int warn; - const char *msgid; - va_list ap; -{ - report_file_and_line (file, line, warn); - vnotice (stderr, msgid, ap); - fputc ('\n', stderr); -} - /* Print a message relevant to the given DECL. */ static void @@ -1040,21 +987,21 @@ file_and_line_for_asm (insn, pfile, pline) } } -/* Report an error at line LINE of file FILE. */ - +/* Report a diagnostic MESSAGE (an errror or a WARNING) at the line number + of the insn INSN. This is used only when INSN is an `asm' with operands, + and each ASM_OPERANDS records its own source file and line. */ static void -v_error_with_file_and_line (file, line, msgid, ap) - const char *file; - int line; - const char *msgid; - va_list ap; +diagnostic_for_asm (insn, msg, args, warn) + rtx insn; + const char *msg; + va_list args; + int warn; { - count_error (0); - report_error_function (file); - if (doing_line_wrapping ()) - vline_wrapper_message_with_location (file, line, 0, msgid, ap); - else - v_message_with_file_and_line (file, line, 0, msgid, ap); + const char *file; + int line; + + file_and_line_for_asm (insn, &file, &line); + report_diagnostic (msg, args, file, line, warn); } /* Report an error at the declaration DECL. @@ -1072,75 +1019,6 @@ v_error_with_decl (decl, msgid, ap) v_message_with_decl (decl, 0, msgid, ap); } - -/* Report an error at the line number of the insn INSN. - This is used only when INSN is an `asm' with operands, - and each ASM_OPERANDS records its own source file and line. */ - -static void -v_error_for_asm (insn, msgid, ap) - rtx insn; - const char *msgid; - va_list ap; -{ - const char *file; - int line; - - count_error (0); - file_and_line_for_asm (insn, &file, &line); - report_error_function (file); - v_message_with_file_and_line (file, line, 0, msgid, ap); -} - - -/* Report an error at the current line number. */ - -static void -verror (msgid, ap) - const char *msgid; - va_list ap; -{ - v_error_with_file_and_line (input_filename, lineno, msgid, ap); -} - - -/* Report a fatal error at the current line number. Allow a front end to - intercept the message. */ - -static void (*fatal_function) PARAMS ((const char *, va_list)); - -static void -vfatal (msgid, ap) - const char *msgid; - va_list ap; -{ - if (fatal_function != 0) - (*fatal_function) (_(msgid), ap); - - verror (msgid, ap); - exit (FATAL_EXIT_CODE); -} - -/* Report a warning at line LINE of file FILE. */ - -static void -v_warning_with_file_and_line (file, line, msgid, ap) - const char *file; - int line; - const char *msgid; - va_list ap; -{ - if (count_error (1)) - { - report_error_function (file); - if (doing_line_wrapping ()) - vline_wrapper_message_with_location (file, line, 1, msgid, ap); - else - v_message_with_file_and_line (file, line, 1, msgid, ap); - } -} - - /* Report a warning at the declaration DECL. MSGID is a format string which uses %s to substitute the declaration name; subsequent substitutions are a la printf. */ @@ -1158,55 +1036,10 @@ v_warning_with_decl (decl, msgid, ap) } } - -/* Report a warning at the line number of the insn INSN. - This is used only when INSN is an `asm' with operands, - and each ASM_OPERANDS records its own source file and line. */ - -static void -v_warning_for_asm (insn, msgid, ap) - rtx insn; - const char *msgid; - va_list ap; -{ - if (count_error (1)) - { - const char *file; - int line; - - file_and_line_for_asm (insn, &file, &line); - report_error_function (file); - v_message_with_file_and_line (file, line, 1, msgid, ap); - } -} - - -/* Report a warning at the current line number. */ - -static void -vwarning (msgid, ap) - const char *msgid; - va_list ap; -{ - v_warning_with_file_and_line (input_filename, lineno, msgid, ap); -} - /* These functions issue either warnings or errors depending on -pedantic-errors. */ static void -vpedwarn (msgid, ap) - const char *msgid; - va_list ap; -{ - if (flag_pedantic_errors) - verror (msgid, ap); - else - vwarning (msgid, ap); -} - - -static void v_pedwarn_with_decl (decl, msgid, ap) tree decl; const char *msgid; @@ -1228,38 +1061,6 @@ v_pedwarn_with_decl (decl, msgid, ap) } } - -static void -v_pedwarn_with_file_and_line (file, line, msgid, ap) - const char *file; - int line; - const char *msgid; - va_list ap; -{ - if (flag_pedantic_errors) - v_error_with_file_and_line (file, line, msgid, ap); - else - v_warning_with_file_and_line (file, line, msgid, ap); -} - - -/* Apologize for not implementing some feature. */ - -static void -vsorry (msgid, ap) - const char *msgid; - va_list ap; -{ - sorrycount++; - if (input_filename) - fprintf (stderr, "%s:%d: ", input_filename, lineno); - else - fprintf (stderr, "%s: ", progname); - notice ("sorry, not implemented: "); - vnotice (stderr, msgid, ap); - fputc ('\n', stderr); -} - /* Count an error or warning. Return 1 if the message should be printed. */ @@ -1344,7 +1145,7 @@ pedwarn VPARAMS ((const char *msgid, ...)) msgid = va_arg (ap, const char *); #endif - vpedwarn (msgid, ap); + report_diagnostic (msgid, ap, input_filename, lineno, !flag_pedantic_errors); va_end (ap); } @@ -1389,7 +1190,7 @@ pedwarn_with_file_and_line VPARAMS ((const char *file, int line, msgid = va_arg (ap, const char *); #endif - v_pedwarn_with_file_and_line (file, line, msgid, ap); + report_diagnostic (msgid, ap, file, line, !flag_pedantic_errors); va_end (ap); } @@ -1401,14 +1202,23 @@ sorry VPARAMS ((const char *msgid, ...)) const char *msgid; #endif va_list ap; + output_state os; + os = diagnostic_buffer->state; VA_START (ap, msgid); #ifndef ANSI_PROTOTYPES msgid = va_arg (ap, const char *); #endif - - vsorry (msgid, ap); + ++sorrycount; + output_set_prefix + (diagnostic_buffer, context_as_prefix (input_filename, lineno, 0)); + output_printf (diagnostic_buffer, "sorry, not implemented: "); + output_buffer_ptr_to_format_args (diagnostic_buffer) = ≈ + output_buffer_text_cursor (diagnostic_buffer) = msgid; + output_format (diagnostic_buffer); + finish_diagnostic (); + diagnostic_buffer->state = os; va_end (ap); } @@ -1551,7 +1361,7 @@ error_with_file_and_line VPARAMS ((const char *file, int line, msgid = va_arg (ap, const char *); #endif - v_error_with_file_and_line (file, line, msgid, ap); + report_diagnostic (msgid, ap, file, line, /* warn = */ 0); va_end (ap); } @@ -1591,7 +1401,7 @@ error_for_asm VPARAMS ((rtx insn, const char *msgid, ...)) msgid = va_arg (ap, const char *); #endif - v_error_for_asm (insn, msgid, ap); + diagnostic_for_asm (insn, msgid, ap, /* warn = */ 0); va_end (ap); } @@ -1609,12 +1419,14 @@ error VPARAMS ((const char *msgid, ...)) msgid = va_arg (ap, const char *); #endif - verror (msgid, ap); + report_diagnostic (msgid, ap, input_filename, lineno, /* warn = */ 0); va_end (ap); } /* Set the function to call when a fatal error occurs. */ +static void (*fatal_function) PARAMS ((const char *, va_list)); + void set_fatal_function (f) void (*f) PARAMS ((const char *, va_list)); @@ -1622,6 +1434,8 @@ set_fatal_function (f) fatal_function = f; } +/* Report a fatal error at the current line number. Allow a front end to + intercept the message. */ void fatal VPARAMS ((const char *msgid, ...)) { @@ -1629,15 +1443,21 @@ fatal VPARAMS ((const char *msgid, ...)) const char *msgid; #endif va_list ap; + va_list args_for_fatal_msg; VA_START (ap, msgid); #ifndef ANSI_PROTOTYPES msgid = va_arg (ap, const char *); #endif + va_copy (args_for_fatal_msg, ap); - vfatal (msgid, ap); + if (fatal_function != NULL) + (*fatal_function) (_(msgid), args_for_fatal_msg); + va_end (args_for_fatal_msg); + report_diagnostic (msgid, ap, input_filename, lineno, 0); va_end (ap); + exit (FATAL_EXIT_CODE); } void @@ -1686,7 +1506,7 @@ warning_with_file_and_line VPARAMS ((const char *file, int line, msgid = va_arg (ap, const char *); #endif - v_warning_with_file_and_line (file, line, msgid, ap); + report_diagnostic (msgid, ap, file, line, /* warn = */ 1); va_end (ap); } @@ -1726,7 +1546,7 @@ warning_for_asm VPARAMS ((rtx insn, const char *msgid, ...)) msgid = va_arg (ap, const char *); #endif - v_warning_for_asm (insn, msgid, ap); + diagnostic_for_asm (insn, msgid, ap, /* warn = */ 1); va_end (ap); } @@ -1744,7 +1564,7 @@ warning VPARAMS ((const char *msgid, ...)) msgid = va_arg (ap, const char *); #endif - vwarning (msgid, ap); + report_diagnostic (msgid, ap, input_filename, lineno, /* warn = */ 1); va_end (ap); } @@ -1753,6 +1573,7 @@ static void finish_diagnostic () { output_to_stream (diagnostic_buffer, stderr); + clear_diagnostic_info (diagnostic_buffer); fputc ('\n', stderr); fflush (stderr); } @@ -1765,8 +1586,9 @@ output_do_verbatim (buffer, msg, args) const char *msg; va_list args; { - output_state os = buffer->state; + output_state os; + os = buffer->state; output_prefix (buffer) = NULL; prefixing_policy (buffer) = DIAGNOSTICS_SHOW_PREFIX_NEVER; output_buffer_text_cursor (buffer) = msg; @@ -1827,8 +1649,9 @@ report_diagnostic (msg, args, file, line, warn) int line; int warn; { - output_state os = diagnostic_buffer->state; + output_state os; + os = diagnostic_buffer->state; diagnostic_msg = msg; diagnostic_args = &args; if (count_error (warn)) -- 2.7.4