From d9d1b0a4878ce9d0e469ba5dfea170214c7c2023 Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 21 Mar 2013 17:36:47 +0000 Subject: PR middle-end/48087 * diagnostic.def (DK_WERROR): New kind. * diagnostic.h (werrorcount): Define. * diagnostic.c (diagnostic_report_diagnostic): For DK_WARNING promoted to DK_ERROR, increment DK_WERROR counter instead of DK_ERROR counter. * toplev.c (toplev_main): Call print_ignored_options even if just werrorcount is non-zero. Exit with FATAL_EXIT_CODE even if just werrorcount is non-zero. * pt.c (convert_nontype_argument): Count werrorcount as warnings. * call.c (build_temp): Likewise. * method.c (synthesize_method): Likewise. * typeck.c (convert_for_initialization): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196887 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/call.c | 4 ++-- gcc/cp/method.c | 4 ++-- gcc/cp/pt.c | 4 ++-- gcc/cp/typeck.c | 4 ++-- gcc/diagnostic.c | 5 ++++- gcc/diagnostic.def | 4 +++- gcc/diagnostic.h | 2 ++ gcc/toplev.c | 4 ++-- 10 files changed, 37 insertions(+), 12 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8a1b19e699..8877f658ee7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2013-03-21 Jakub Jelinek + PR middle-end/48087 + * diagnostic.def (DK_WERROR): New kind. + * diagnostic.h (werrorcount): Define. + * diagnostic.c (diagnostic_report_diagnostic): For DK_WARNING + promoted to DK_ERROR, increment DK_WERROR counter instead of + DK_ERROR counter. + * toplev.c (toplev_main): Call print_ignored_options even if + just werrorcount is non-zero. Exit with FATAL_EXIT_CODE + even if just werrorcount is non-zero. + PR debug/55608 * dwarf2out.c (tree_add_const_value_attribute): Call ggc_free (array) on failure. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7c282e85719..377528d62a5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2013-03-21 Jakub Jelinek + + PR middle-end/48087 + * pt.c (convert_nontype_argument): Count werrorcount as warnings. + * call.c (build_temp): Likewise. + * method.c (synthesize_method): Likewise. + * typeck.c (convert_for_initialization): Likewise. + 2013-03-21 Marc Glisse * call.c (build_conditional_expr_1): Fold VEC_COND_EXPR. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 5c9c28615df..87fbb2ef020 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5709,12 +5709,12 @@ build_temp (tree expr, tree type, int flags, int savew, savee; vec *args; - savew = warningcount, savee = errorcount; + savew = warningcount + werrorcount, savee = errorcount; args = make_tree_vector_single (expr); expr = build_special_member_call (NULL_TREE, complete_ctor_identifier, &args, type, flags, complain); release_tree_vector (args); - if (warningcount > savew) + if (warningcount + werrorcount > savew) *diagnostic_kind = DK_WARNING; else if (errorcount > savee) *diagnostic_kind = DK_ERROR; diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 55c7e50d308..316c5d3b8eb 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -755,7 +755,7 @@ synthesize_method (tree fndecl) tree stmt; location_t save_input_location = input_location; int error_count = errorcount; - int warning_count = warningcount; + int warning_count = warningcount + werrorcount; /* Reset the source location, we might have been previously deferred, and thus have saved where we were first needed. */ @@ -817,7 +817,7 @@ synthesize_method (tree fndecl) pop_deferring_access_checks (); - if (error_count != errorcount || warning_count != warningcount) + if (error_count != errorcount || warning_count != warningcount + werrorcount) inform (input_location, "synthesized method %qD first required here ", fndecl); } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d56ffede6b6..f8153059f7d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5601,12 +5601,12 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) { if (complain & tf_error) { - int errs = errorcount, warns = warningcount; + int errs = errorcount, warns = warningcount + werrorcount; if (processing_template_decl && !require_potential_constant_expression (expr)) return NULL_TREE; expr = cxx_constant_value (expr); - if (errorcount > errs || warningcount > warns) + if (errorcount > errs || warningcount + werrorcount > warns) inform (EXPR_LOC_OR_HERE (expr), "in template argument for type %qT ", type); if (expr == error_mark_node) diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 3ced8586663..c58b7b375f2 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -7977,11 +7977,11 @@ convert_for_initialization (tree exp, tree type, tree rhs, int flags, int savew = 0, savee = 0; if (fndecl) - savew = warningcount, savee = errorcount; + savew = warningcount + werrorcount, savee = errorcount; rhs = initialize_reference (type, rhs, flags, complain); if (fndecl) { - if (warningcount > savew) + if (warningcount + werrorcount > savew) warning (0, "in passing argument %P of %q+D", parmnum, fndecl); else if (errorcount > savee) error ("in passing argument %P of %q+D", parmnum, fndecl); diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index a365c608a91..87eb8dc40ab 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -729,7 +729,10 @@ diagnostic_report_diagnostic (diagnostic_context *context, diagnostic->message.format_spec, diagnostic->message.args_ptr); } - ++diagnostic_kind_count (context, diagnostic->kind); + if (diagnostic->kind == DK_ERROR && orig_diag_kind == DK_WARNING) + ++diagnostic_kind_count (context, DK_WERROR); + else + ++diagnostic_kind_count (context, diagnostic->kind); saved_format_spec = diagnostic->message.format_spec; if (context->show_option_requested) diff --git a/gcc/diagnostic.def b/gcc/diagnostic.def index 53179e445cd..9566491ca2a 100644 --- a/gcc/diagnostic.def +++ b/gcc/diagnostic.def @@ -42,4 +42,6 @@ DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ") prefix does not matter. */ DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ") DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ") - +/* This one is just for counting DK_WARNING promoted to DK_ERROR + due to -Werror and -Werror=warning. */ +DEFINE_DIAGNOSTIC_KIND (DK_WERROR, "error: ") diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index f0fae96275b..3b500964c7d 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -240,6 +240,8 @@ extern diagnostic_context *global_dc; #define errorcount diagnostic_kind_count (global_dc, DK_ERROR) /* Similarly, but for warnings. */ #define warningcount diagnostic_kind_count (global_dc, DK_WARNING) +/* Similarly, but for warnings promoted to errors. */ +#define werrorcount diagnostic_kind_count (global_dc, DK_WERROR) /* Similarly, but for sorrys. */ #define sorrycount diagnostic_kind_count (global_dc, DK_SORRY) diff --git a/gcc/toplev.c b/gcc/toplev.c index 071f1bdc3af..ad423917649 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1951,7 +1951,7 @@ toplev_main (int argc, char **argv) if (!exit_after_options) do_compile (); - if (warningcount || errorcount) + if (warningcount || errorcount || werrorcount) print_ignored_options (); diagnostic_finish (global_dc); @@ -1960,7 +1960,7 @@ toplev_main (int argc, char **argv) finalize_plugins (); location_adhoc_data_fini (line_table); - if (seen_error ()) + if (seen_error () || werrorcount) return (FATAL_EXIT_CODE); return (SUCCESS_EXIT_CODE); -- cgit v1.2.1