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
* dwarf2out.c (tree_add_const_value_attribute): Call ggc_free (array)
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>
* call.c (build_conditional_expr_1): Fold VEC_COND_EXPR.
int savew, savee;
vec<tree, va_gc> *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;
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. */
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);
}
{
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)
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);
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)
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: ")
#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)
if (!exit_after_options)
do_compile ();
- if (warningcount || errorcount)
+ if (warningcount || errorcount || werrorcount)
print_ignored_options ();
diagnostic_finish (global_dc);
finalize_plugins ();
location_adhoc_data_fini (line_table);
- if (seen_error ())
+ if (seen_error () || werrorcount)
return (FATAL_EXIT_CODE);
return (SUCCESS_EXIT_CODE);