Commit 37e99116 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/48087 (-Wall -Werror adds warnings over and above those generated by -Wall)

	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.

From-SVN: r196887
parent c845cfe1
2013-03-21 Jakub Jelinek <jakub@redhat.com> 2013-03-21 Jakub Jelinek <jakub@redhat.com>
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 PR debug/55608
* dwarf2out.c (tree_add_const_value_attribute): Call ggc_free (array) * dwarf2out.c (tree_add_const_value_attribute): Call ggc_free (array)
on failure. on failure.
......
2013-03-21 Jakub Jelinek <jakub@redhat.com>
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 <marc.glisse@inria.fr> 2013-03-21 Marc Glisse <marc.glisse@inria.fr>
* call.c (build_conditional_expr_1): Fold VEC_COND_EXPR. * call.c (build_conditional_expr_1): Fold VEC_COND_EXPR.
......
...@@ -5709,12 +5709,12 @@ build_temp (tree expr, tree type, int flags, ...@@ -5709,12 +5709,12 @@ build_temp (tree expr, tree type, int flags,
int savew, savee; int savew, savee;
vec<tree, va_gc> *args; vec<tree, va_gc> *args;
savew = warningcount, savee = errorcount; savew = warningcount + werrorcount, savee = errorcount;
args = make_tree_vector_single (expr); args = make_tree_vector_single (expr);
expr = build_special_member_call (NULL_TREE, complete_ctor_identifier, expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
&args, type, flags, complain); &args, type, flags, complain);
release_tree_vector (args); release_tree_vector (args);
if (warningcount > savew) if (warningcount + werrorcount > savew)
*diagnostic_kind = DK_WARNING; *diagnostic_kind = DK_WARNING;
else if (errorcount > savee) else if (errorcount > savee)
*diagnostic_kind = DK_ERROR; *diagnostic_kind = DK_ERROR;
......
...@@ -755,7 +755,7 @@ synthesize_method (tree fndecl) ...@@ -755,7 +755,7 @@ synthesize_method (tree fndecl)
tree stmt; tree stmt;
location_t save_input_location = input_location; location_t save_input_location = input_location;
int error_count = errorcount; int error_count = errorcount;
int warning_count = warningcount; int warning_count = warningcount + werrorcount;
/* Reset the source location, we might have been previously /* Reset the source location, we might have been previously
deferred, and thus have saved where we were first needed. */ deferred, and thus have saved where we were first needed. */
...@@ -817,7 +817,7 @@ synthesize_method (tree fndecl) ...@@ -817,7 +817,7 @@ synthesize_method (tree fndecl)
pop_deferring_access_checks (); 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 ", inform (input_location, "synthesized method %qD first required here ",
fndecl); fndecl);
} }
......
...@@ -5601,12 +5601,12 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) ...@@ -5601,12 +5601,12 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
{ {
if (complain & tf_error) if (complain & tf_error)
{ {
int errs = errorcount, warns = warningcount; int errs = errorcount, warns = warningcount + werrorcount;
if (processing_template_decl if (processing_template_decl
&& !require_potential_constant_expression (expr)) && !require_potential_constant_expression (expr))
return NULL_TREE; return NULL_TREE;
expr = cxx_constant_value (expr); expr = cxx_constant_value (expr);
if (errorcount > errs || warningcount > warns) if (errorcount > errs || warningcount + werrorcount > warns)
inform (EXPR_LOC_OR_HERE (expr), inform (EXPR_LOC_OR_HERE (expr),
"in template argument for type %qT ", type); "in template argument for type %qT ", type);
if (expr == error_mark_node) if (expr == error_mark_node)
......
...@@ -7977,11 +7977,11 @@ convert_for_initialization (tree exp, tree type, tree rhs, int flags, ...@@ -7977,11 +7977,11 @@ convert_for_initialization (tree exp, tree type, tree rhs, int flags,
int savew = 0, savee = 0; int savew = 0, savee = 0;
if (fndecl) if (fndecl)
savew = warningcount, savee = errorcount; savew = warningcount + werrorcount, savee = errorcount;
rhs = initialize_reference (type, rhs, flags, complain); rhs = initialize_reference (type, rhs, flags, complain);
if (fndecl) if (fndecl)
{ {
if (warningcount > savew) if (warningcount + werrorcount > savew)
warning (0, "in passing argument %P of %q+D", parmnum, fndecl); warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
else if (errorcount > savee) else if (errorcount > savee)
error ("in passing argument %P of %q+D", parmnum, fndecl); error ("in passing argument %P of %q+D", parmnum, fndecl);
......
...@@ -729,7 +729,10 @@ diagnostic_report_diagnostic (diagnostic_context *context, ...@@ -729,7 +729,10 @@ diagnostic_report_diagnostic (diagnostic_context *context,
diagnostic->message.format_spec, diagnostic->message.format_spec,
diagnostic->message.args_ptr); 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; saved_format_spec = diagnostic->message.format_spec;
if (context->show_option_requested) if (context->show_option_requested)
......
...@@ -42,4 +42,6 @@ DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ") ...@@ -42,4 +42,6 @@ DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ")
prefix does not matter. */ prefix does not matter. */
DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ") DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ")
DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ") 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: ")
...@@ -240,6 +240,8 @@ extern diagnostic_context *global_dc; ...@@ -240,6 +240,8 @@ extern diagnostic_context *global_dc;
#define errorcount diagnostic_kind_count (global_dc, DK_ERROR) #define errorcount diagnostic_kind_count (global_dc, DK_ERROR)
/* Similarly, but for warnings. */ /* Similarly, but for warnings. */
#define warningcount diagnostic_kind_count (global_dc, DK_WARNING) #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. */ /* Similarly, but for sorrys. */
#define sorrycount diagnostic_kind_count (global_dc, DK_SORRY) #define sorrycount diagnostic_kind_count (global_dc, DK_SORRY)
......
...@@ -1951,7 +1951,7 @@ toplev_main (int argc, char **argv) ...@@ -1951,7 +1951,7 @@ toplev_main (int argc, char **argv)
if (!exit_after_options) if (!exit_after_options)
do_compile (); do_compile ();
if (warningcount || errorcount) if (warningcount || errorcount || werrorcount)
print_ignored_options (); print_ignored_options ();
diagnostic_finish (global_dc); diagnostic_finish (global_dc);
...@@ -1960,7 +1960,7 @@ toplev_main (int argc, char **argv) ...@@ -1960,7 +1960,7 @@ toplev_main (int argc, char **argv)
finalize_plugins (); finalize_plugins ();
location_adhoc_data_fini (line_table); location_adhoc_data_fini (line_table);
if (seen_error ()) if (seen_error () || werrorcount)
return (FATAL_EXIT_CODE); return (FATAL_EXIT_CODE);
return (SUCCESS_EXIT_CODE); return (SUCCESS_EXIT_CODE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment