Mercurial > hg > CbC > CbC_gcc
diff gcc/diagnostic.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/diagnostic.c Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/diagnostic.c Fri Feb 12 23:39:51 2010 +0900 @@ -1,6 +1,6 @@ /* Language-independent diagnostic subroutines for the GNU Compiler Collection - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 - Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. Contributed by Gabriel Dos Reis <gdr@codesourcery.com> This file is part of GCC. @@ -40,6 +40,7 @@ #include "langhooks.h" #include "langhooks-def.h" #include "opts.h" +#include "plugin.h" #define pedantic_warning_kind() (flag_pedantic_errors ? DK_ERROR : DK_WARNING) #define permissive_error_kind() (flag_permissive ? DK_WARNING : DK_ERROR) @@ -47,11 +48,6 @@ /* Prototypes. */ static char *build_message_string (const char *, ...) ATTRIBUTE_PRINTF_1; -static void default_diagnostic_starter (diagnostic_context *, - diagnostic_info *); -static void default_diagnostic_finalizer (diagnostic_context *, - diagnostic_info *); - static void error_recursion (diagnostic_context *) ATTRIBUTE_NORETURN; static void diagnostic_action_after_output (diagnostic_context *, @@ -126,6 +122,7 @@ diagnostic->message.args_ptr = args; diagnostic->message.format_spec = msg; diagnostic->location = location; + diagnostic->override_column = 0; diagnostic->kind = kind; diagnostic->option_index = 0; } @@ -153,12 +150,14 @@ }; const char *text = _(diagnostic_kind_text[diagnostic->kind]); expanded_location s = expand_location (diagnostic->location); + if (diagnostic->override_column) + s.column = diagnostic->override_column; gcc_assert (diagnostic->kind < DK_LAST_DIAGNOSTIC_KIND); return (s.file == NULL ? build_message_string ("%s: %s", progname, text) - : flag_show_column && s.column != 0 + : flag_show_column ? build_message_string ("%s:%d:%d: %s", s.file, s.line, s.column, text) : build_message_string ("%s:%d: %s", s.file, s.line, text)); } @@ -240,9 +239,15 @@ if (! MAIN_FILE_P (map)) { map = INCLUDED_FROM (line_table, map); - pp_verbatim (context->printer, - "In file included from %s:%d", - map->to_file, LAST_SOURCE_LINE (map)); + if (flag_show_column) + pp_verbatim (context->printer, + "In file included from %s:%d:%d", + map->to_file, + LAST_SOURCE_LINE (map), LAST_SOURCE_COLUMN (map)); + else + pp_verbatim (context->printer, + "In file included from %s:%d", + map->to_file, LAST_SOURCE_LINE (map)); while (! MAIN_FILE_P (map)) { map = INCLUDED_FROM (line_table, map); @@ -256,7 +261,7 @@ } } -static void +void default_diagnostic_starter (diagnostic_context *context, diagnostic_info *diagnostic) { @@ -264,7 +269,7 @@ pp_set_prefix (context->printer, diagnostic_build_prefix (diagnostic)); } -static void +void default_diagnostic_finalizer (diagnostic_context *context, diagnostic_info *diagnostic ATTRIBUTE_UNUSED) { @@ -295,7 +300,7 @@ DC. This function is *the* subroutine in terms of which front-ends should implement their specific diagnostic handling modules. The front-end independent format specifiers are exactly those described - in the documentation of output_format. + in the documentation of output_format. Return true if a diagnostic was printed, false otherwise. */ bool @@ -312,9 +317,12 @@ && !diagnostic_report_warnings_p (location)) return false; - if (diagnostic->kind == DK_PEDWARN) + if (diagnostic->kind == DK_NOTE && flag_compare_debug) + return false; + + if (diagnostic->kind == DK_PEDWARN) diagnostic->kind = pedantic_warning_kind (); - + if (context->lock > 0) { /* If we're reporting an ICE in the middle of some other error, @@ -336,7 +344,7 @@ diagnostic->kind = DK_ERROR; maybe_print_warnings_as_errors_message = true; } - + if (diagnostic->option_index) { /* This tests if the user provided the appropriate -Wfoo or @@ -368,7 +376,15 @@ context->lock++; - if (diagnostic->kind == DK_ICE) + if (diagnostic->kind == DK_ICE && plugins_active_p ()) + { + fnotice (stderr, "*** WARNING *** there are active plugins, do not report" + " this as a bug unless you can reproduce it without enabling" + " any plugins.\n"); + dump_active_plugins (stderr); + } + + if (diagnostic->kind == DK_ICE) { #ifndef ENABLE_CHECKING /* When not checking, ICEs are converted to fatal errors when an @@ -389,13 +405,13 @@ diagnostic->message.args_ptr); } ++diagnostic_kind_count (context, diagnostic->kind); - + saved_format_spec = diagnostic->message.format_spec; if (context->show_option_requested && diagnostic->option_index) diagnostic->message.format_spec = ACONCAT ((diagnostic->message.format_spec, " [", cl_options[diagnostic->option_index].opt_text, "]", NULL)); - + diagnostic->message.locus = &diagnostic->location; diagnostic->message.abstract_origin = &diagnostic->abstract_origin; diagnostic->abstract_origin = NULL; @@ -466,7 +482,7 @@ } bool -emit_diagnostic (diagnostic_t kind, location_t location, int opt, +emit_diagnostic (diagnostic_t kind, location_t location, int opt, const char *gmsgid, ...) { diagnostic_info diagnostic; @@ -504,7 +520,7 @@ } /* A warning at INPUT_LOCATION. Use this for code which is correct according - to the relevant language specification but is likely to be buggy anyway. + to the relevant language specification but is likely to be buggy anyway. Returns true if the warning was printed, false if it was inhibited. */ bool warning (int opt, const char *gmsgid, ...)