diagnostics: get rid of *_at_rich_loc in favor of overloading

Adding a fix-it hint currently involves changing e.g.:

  error_at (token->location,
            "unknown type name %qE; did you mean %qs?",
            token->value, hint);
to:

  gcc_rich_location richloc (token->location);
  richloc.add_fixit_replace (hint);
  error_at_rich_loc (&richloc,
                     "unknown type name %qE; did you mean %qs?",
                     token->value, hint);

to make the change from taking a location_t to a rich_location *.

This patch renames the "*_at_rich_loc" diagnostic entrypoints to use
the same function names for rich_location * as for location_t,
via overloading, to simplify the above change to just changing from:

  error_at (token->location,
            "unknown type name %qE; did you mean %qs?",
            token->value, hint);
to:

  gcc_rich_location richloc (token->location);
  richloc.add_fixit_replace (hint);
  error_at (&richloc,
            "unknown type name %qE; did you mean %qs?",
            token->value, hint);

thus saving space (and typing) and usually avoiding the need to reindent
the "error_at" invocation.

With this change, 0 is no longer acceptable as a location_t to these
entrypoints, as e.g.:

../../src/gcc/auto-profile.c:855:37: error: call of overloaded
'inform(int, const char [18])' is ambiguous
       inform (0, "Not expected TAG.");
                                     ^
In file included from ../../src/gcc/auto-profile.c:35:0:
../../src/gcc/diagnostic-core.h:88:13: note: candidate:
'void inform(location_t, const char*, ...)'
 extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
             ^~~~~~
../../src/gcc/diagnostic-core.h:89:13: note: candidate:
'void inform(rich_location*, const char*, ...)'
 extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
             ^~~~~~

Such locations now need to be spelled out as UNKNOWN_LOCATION,
rather than 0.

I considered making the API take a rich_location & rather than a
rich_location *, but doing so would mean replacing
  diagnostic_set_info
and
  diagnostic_set_info_translated
with a constructor for diagnostic_info, which was a more invasive
change.  Maybe in the future.

gcc/ChangeLog:
	* auto-profile.c (autofdo_source_profile::read): Use
	UNKNOWN_LOCATION rather than 0.
	* diagnostic-core.h (warning_at_rich_loc): Rename to...
	(warning_at): ...this overload.
	(warning_at_rich_loc_n): Rename to...
	(warning_n): ...this overload.
	(error_at_rich_loc): Rename to...
	(error_at): ...this overload.
	(pedwarn_at_rich_loc): Rename to...
	(pedwarn): ...this overload.
	(permerror_at_rich_loc): Rename to...
	(permerror): ...this overload.
	(inform_at_rich_loc): Rename to...
	(inform): ...this overload.
	* diagnostic.c: (diagnostic_n_impl): Delete location_t-based decl.
	(diagnostic_n_impl_richloc): Rename to...
	(diagnostic_n_impl): ...this rich_location *-based decl.
	(inform_at_rich_loc): Rename to...
	(inform): ...this, and add an assertion.
	(inform_n): Update for removal of location_t-based diagnostic_n_impl.
	(warning_at_rich_loc): Rename to...
	(warning_at): ...this, and add an assertion.
	(warning_at_rich_loc_n): Rename to...
	(warning_n): ...this, and add an assertion.
	(warning_n): Update location_t-based implementation for removal of
	location_t-based diagnostic_n_impl.
	(pedwarn_at_rich_loc): Rename to...
	(pedwarn): ...this, and add an assertion.
	(permerror_at_rich_loc): Rename to...
	(permerror): ...this, and add an assertion.
	(error_n): Update for removal of location_t-based diagnostic_n_impl.
	(error_at_rich_loc): Rename to...
	(error_at): ...this, and add an assertion.
	* gcc.c (do_spec_1): Use UNKNOWN_LOCATION rather than 0.
	(driver::do_spec_on_infiles): Likewise.
	* substring-locations.c (format_warning_va): Update for renaming
	of inform_at_rich_loc.

gcc/c-family/ChangeLog:
	* c-common.c (binary_op_error): Update for renaming of
	error_at_rich_loc.
	(c_parse_error): Likewise.
	* c-warn.c (warn_logical_not_parentheses): Likewise for
	renaming of inform_at_rich_loc.
	(warn_for_restrict): Likewise for renaming of
	warning_at_rich_loc_n.

gcc/c/ChangeLog:
	* c-decl.c (implicit_decl_warning): Update for renaming of
	pedwarn_at_rich_loc and warning_at_rich_loc.
	(implicitly_declare): Likewise for renaming of inform_at_rich_loc.
	(undeclared_variable): Likewise for renaming of error_at_rich_loc.
	* c-parser.c (c_parser_declaration_or_fndef): Likewise.
	(c_parser_struct_or_union_specifier): Likewise for renaming of
	pedwarn_at_rich_loc.
	(c_parser_parameter_declaration): Likewise for renaming of
	error_at_rich_loc.
	* c-typeck.c (build_component_ref): Likewise.
	(build_unary_op): Likewise for renaming of inform_at_rich_loc.
	(pop_init_level): Likewise for renaming of warning_at_rich_loc.
	(set_init_label): Likewise for renaming of error_at_rich_loc.

gcc/cp/ChangeLog:
	* class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
	than 0.
	* name-lookup.c (suggest_alternatives_for): Update for renaming of
	inform_at_rich_loc.
	(maybe_suggest_missing_header): Likewise.
	(suggest_alternative_in_explicit_scope): Likewise.
	* parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
	renaming of error_at_rich_loc.
	(cp_parser_string_literal): Likewise.
	(cp_parser_nested_name_specifier_opt): Likewise.
	(cp_parser_cast_expression): Likewise for renaming of
	warning_at_rich_loc.
	(cp_parser_decl_specifier_seq): Likewise for renaming of
	error_at_rich_loc and warning_at_rich_loc.
	(cp_parser_elaborated_type_specifier): Likewise for renaming of
	pedwarn_at_rich_loc.
	(cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
	error_at_rich_loc.
	(cp_parser_virt_specifier_seq_opt): Likewise.
	(cp_parser_class_specifier_1): Likewise.
	(cp_parser_class_head): Likewise.
	(cp_parser_member_declaration): Likewise for renaming of
	pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
	(cp_parser_enclosed_template_argument_list): Likewise for renaming
	of error_at_rich_loc.
	(set_and_check_decl_spec_loc): Likewise.
	* pt.c (listify): Likewise.
	* rtti.c (typeid_ok_p): Likewise.
	* semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
	than 0.
	* typeck.c (access_failure_info::maybe_suggest_accessor): Update
	for renaming of inform_at_rich_loc.
	(finish_class_member_access_expr): Likewise for renaming of
	error_at_rich_loc.

gcc/objc/ChangeLog:
	* objc-gnu-runtime-abi-01.c (objc_gnu_runtime_abi_01_init): Use
	UNKNOWN_LOCATION rather than 0.

gcc/testsuite/ChangeLog:
	* gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update
	for renaming of error_at_rich_loc and inform_at_rich_loc.
	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
	(test_show_locus): Likewise for renaming of warning_at_rich_loc.

libcpp/ChangeLog:
	* directives.c (_cpp_handle_directive): Update for renaming of
	cpp_error_at_richloc to cpp_error_at.
	* errors.c (cpp_diagnostic_at_richloc): Rename to...
	(cpp_diagnostic_at): ...this, dropping the location_t-based
	implementation.
	(cpp_diagnostic): Update for removal of location_t-based
	cpp_diagnostic_at.
	(cpp_error_at): Likewise.
	(cpp_error_at_richloc): Rename to...
	(cpp_error_at): ...this, and update for renaming of
	cpp_diagnostic_at_richloc.
	* include/cpplib.h (cpp_error_at_richloc): Rename to...
	(cpp_error_at): ...this.

From-SVN: r254280
This commit is contained in:
David Malcolm 2017-10-31 20:21:58 +00:00 committed by David Malcolm
parent 881c969cf6
commit 64a5912c9e
30 changed files with 362 additions and 250 deletions

View File

@ -1,3 +1,43 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* auto-profile.c (autofdo_source_profile::read): Use
UNKNOWN_LOCATION rather than 0.
* diagnostic-core.h (warning_at_rich_loc): Rename to...
(warning_at): ...this overload.
(warning_at_rich_loc_n): Rename to...
(warning_n): ...this overload.
(error_at_rich_loc): Rename to...
(error_at): ...this overload.
(pedwarn_at_rich_loc): Rename to...
(pedwarn): ...this overload.
(permerror_at_rich_loc): Rename to...
(permerror): ...this overload.
(inform_at_rich_loc): Rename to...
(inform): ...this overload.
* diagnostic.c: (diagnostic_n_impl): Delete location_t-based decl.
(diagnostic_n_impl_richloc): Rename to...
(diagnostic_n_impl): ...this rich_location *-based decl.
(inform_at_rich_loc): Rename to...
(inform): ...this, and add an assertion.
(inform_n): Update for removal of location_t-based diagnostic_n_impl.
(warning_at_rich_loc): Rename to...
(warning_at): ...this, and add an assertion.
(warning_at_rich_loc_n): Rename to...
(warning_n): ...this, and add an assertion.
(warning_n): Update location_t-based implementation for removal of
location_t-based diagnostic_n_impl.
(pedwarn_at_rich_loc): Rename to...
(pedwarn): ...this, and add an assertion.
(permerror_at_rich_loc): Rename to...
(permerror): ...this, and add an assertion.
(error_n): Update for removal of location_t-based diagnostic_n_impl.
(error_at_rich_loc): Rename to...
(error_at): ...this, and add an assertion.
* gcc.c (do_spec_1): Use UNKNOWN_LOCATION rather than 0.
(driver::do_spec_on_infiles): Likewise.
* substring-locations.c (format_warning_va): Update for renaming
of inform_at_rich_loc.
2017-10-31 Michael Meissner <meissner@linux.vnet.ibm.com>
* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and

View File

@ -852,7 +852,7 @@ autofdo_source_profile::read ()
{
if (gcov_read_unsigned () != GCOV_TAG_AFDO_FUNCTION)
{
inform (0, "Not expected TAG.");
inform (UNKNOWN_LOCATION, "Not expected TAG.");
return false;
}

View File

@ -1,3 +1,13 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* c-common.c (binary_op_error): Update for renaming of
error_at_rich_loc.
(c_parse_error): Likewise.
* c-warn.c (warn_logical_not_parentheses): Likewise for
renaming of inform_at_rich_loc.
(warn_for_restrict): Likewise for renaming of
warning_at_rich_loc_n.
2017-10-30 Joseph Myers <joseph@codesourcery.com>
* c.opt (std=c17, std=gnu17, std=iso9899:2017): New options.

View File

@ -2694,9 +2694,9 @@ binary_op_error (rich_location *richloc, enum tree_code code,
default:
gcc_unreachable ();
}
error_at_rich_loc (richloc,
"invalid operands to binary %s (have %qT and %qT)",
opname, type0, type1);
error_at (richloc,
"invalid operands to binary %s (have %qT and %qT)",
opname, type0, type1);
}
/* Given an expression as a tree, return its original type. Do this
@ -5944,7 +5944,7 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else
message = catenate_messages (gmsgid, " before %s'\\x%x'");
error_at_rich_loc (richloc, message, prefix, val);
error_at (richloc, message, prefix, val);
free (message);
message = NULL;
}
@ -5972,7 +5972,7 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else if (token_type == CPP_NAME)
{
message = catenate_messages (gmsgid, " before %qE");
error_at_rich_loc (richloc, message, value);
error_at (richloc, message, value);
free (message);
message = NULL;
}
@ -5985,16 +5985,16 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
else if (token_type < N_TTYPES)
{
message = catenate_messages (gmsgid, " before %qs token");
error_at_rich_loc (richloc, message, cpp_type2name (token_type, token_flags));
error_at (richloc, message, cpp_type2name (token_type, token_flags));
free (message);
message = NULL;
}
else
error_at_rich_loc (richloc, gmsgid);
error_at (richloc, gmsgid);
if (message)
{
error_at_rich_loc (richloc, message);
error_at (richloc, message);
free (message);
}
#undef catenate_messages

View File

@ -496,8 +496,8 @@ warn_logical_not_parentheses (location_t location, enum tree_code code,
rich_location richloc (line_table, lhs_loc);
richloc.add_fixit_insert_before (lhs_loc, "(");
richloc.add_fixit_insert_after (lhs_loc, ")");
inform_at_rich_loc (&richloc, "add parentheses around left hand side "
"expression to silence this warning");
inform (&richloc, "add parentheses around left hand side "
"expression to silence this warning");
}
}
@ -2391,13 +2391,13 @@ warn_for_restrict (unsigned param_pos, tree *argarray, unsigned nargs)
richloc.add_range (EXPR_LOCATION (arg), false);
}
warning_at_rich_loc_n (&richloc, OPT_Wrestrict, arg_positions.length (),
"passing argument %i to restrict-qualified parameter"
" aliases with argument %Z",
"passing argument %i to restrict-qualified parameter"
" aliases with arguments %Z",
param_pos + 1, arg_positions.address (),
arg_positions.length ());
warning_n (&richloc, OPT_Wrestrict, arg_positions.length (),
"passing argument %i to restrict-qualified parameter"
" aliases with argument %Z",
"passing argument %i to restrict-qualified parameter"
" aliases with arguments %Z",
param_pos + 1, arg_positions.address (),
arg_positions.length ());
}
/* Callback function to determine whether an expression TP or one of its

View File

@ -1,3 +1,19 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* c-decl.c (implicit_decl_warning): Update for renaming of
pedwarn_at_rich_loc and warning_at_rich_loc.
(implicitly_declare): Likewise for renaming of inform_at_rich_loc.
(undeclared_variable): Likewise for renaming of error_at_rich_loc.
* c-parser.c (c_parser_declaration_or_fndef): Likewise.
(c_parser_struct_or_union_specifier): Likewise for renaming of
pedwarn_at_rich_loc.
(c_parser_parameter_declaration): Likewise for renaming of
error_at_rich_loc.
* c-typeck.c (build_component_ref): Likewise.
(build_unary_op): Likewise for renaming of inform_at_rich_loc.
(pop_init_level): Likewise for renaming of warning_at_rich_loc.
(set_init_label): Likewise for renaming of error_at_rich_loc.
2017-10-30 Richard Biener <rguenther@suse.de>
* gimple-parser.c (c_parser_gimple_statement): Parse conditional

View File

@ -3119,10 +3119,10 @@ implicit_decl_warning (location_t loc, tree id, tree olddecl)
{
gcc_rich_location richloc (loc);
richloc.add_fixit_replace (hint);
warned = pedwarn_at_rich_loc
(&richloc, OPT_Wimplicit_function_declaration,
"implicit declaration of function %qE; did you mean %qs?",
id, hint);
warned = pedwarn (&richloc, OPT_Wimplicit_function_declaration,
"implicit declaration of function %qE;"
" did you mean %qs?",
id, hint);
}
else
warned = pedwarn (loc, OPT_Wimplicit_function_declaration,
@ -3132,7 +3132,7 @@ implicit_decl_warning (location_t loc, tree id, tree olddecl)
{
gcc_rich_location richloc (loc);
richloc.add_fixit_replace (hint);
warned = warning_at_rich_loc
warned = warning_at
(&richloc, OPT_Wimplicit_function_declaration,
G_("implicit declaration of function %qE; did you mean %qs?"),
id, hint);
@ -3401,10 +3401,9 @@ implicitly_declare (location_t loc, tree functionid)
{
rich_location richloc (line_table, loc);
maybe_add_include_fixit (&richloc, header);
inform_at_rich_loc
(&richloc,
"include %qs or provide a declaration of %qD",
header, decl);
inform (&richloc,
"include %qs or provide a declaration of %qD",
header, decl);
}
newtype = TREE_TYPE (decl);
}
@ -3472,10 +3471,10 @@ undeclared_variable (location_t loc, tree id)
{
gcc_rich_location richloc (loc);
richloc.add_fixit_replace (guessed_id);
error_at_rich_loc (&richloc,
"%qE undeclared here (not in a function);"
" did you mean %qs?",
id, guessed_id);
error_at (&richloc,
"%qE undeclared here (not in a function);"
" did you mean %qs?",
id, guessed_id);
}
else
error_at (loc, "%qE undeclared here (not in a function)", id);
@ -3490,11 +3489,10 @@ undeclared_variable (location_t loc, tree id)
{
gcc_rich_location richloc (loc);
richloc.add_fixit_replace (guessed_id);
error_at_rich_loc
(&richloc,
"%qE undeclared (first use in this function);"
" did you mean %qs?",
id, guessed_id);
error_at (&richloc,
"%qE undeclared (first use in this function);"
" did you mean %qs?",
id, guessed_id);
}
else
error_at (loc, "%qE undeclared (first use in this function)", id);

View File

@ -1785,26 +1785,26 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
{
/* This is not C++ with its implicit typedef. */
richloc.add_fixit_insert_before ("struct ");
error_at_rich_loc (&richloc,
"unknown type name %qE;"
" use %<struct%> keyword to refer to the type",
name);
error_at (&richloc,
"unknown type name %qE;"
" use %<struct%> keyword to refer to the type",
name);
}
else if (tag_exists_p (UNION_TYPE, name))
{
richloc.add_fixit_insert_before ("union ");
error_at_rich_loc (&richloc,
"unknown type name %qE;"
" use %<union%> keyword to refer to the type",
name);
error_at (&richloc,
"unknown type name %qE;"
" use %<union%> keyword to refer to the type",
name);
}
else if (tag_exists_p (ENUMERAL_TYPE, name))
{
richloc.add_fixit_insert_before ("enum ");
error_at_rich_loc (&richloc,
"unknown type name %qE;"
" use %<enum%> keyword to refer to the type",
name);
error_at (&richloc,
"unknown type name %qE;"
" use %<enum%> keyword to refer to the type",
name);
}
else
{
@ -1812,9 +1812,9 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
if (hint)
{
richloc.add_fixit_replace (hint);
error_at_rich_loc (&richloc,
"unknown type name %qE; did you mean %qs?",
name, hint);
error_at (&richloc,
"unknown type name %qE; did you mean %qs?",
name, hint);
}
else
error_at (here, "unknown type name %qE", name);
@ -3168,9 +3168,8 @@ c_parser_struct_or_union_specifier (c_parser *parser)
= c_parser_peek_token (parser)->location;
gcc_rich_location richloc (semicolon_loc);
richloc.add_fixit_remove ();
pedwarn_at_rich_loc
(&richloc, OPT_Wpedantic,
"extra semicolon in struct or union specified");
pedwarn (&richloc, OPT_Wpedantic,
"extra semicolon in struct or union specified");
c_parser_consume_token (parser);
continue;
}
@ -4073,9 +4072,9 @@ c_parser_parameter_declaration (c_parser *parser, tree attrs)
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_replace (hint);
error_at_rich_loc (&richloc,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
error_at (&richloc,
"unknown type name %qE; did you mean %qs?",
token->value, hint);
}
else
error_at (token->location, "unknown type name %qE", token->value);

View File

@ -2406,10 +2406,9 @@ build_component_ref (location_t loc, tree datum, tree component,
gcc_rich_location rich_loc (reported_loc);
if (component_loc != UNKNOWN_LOCATION)
rich_loc.add_fixit_misspelled_id (component_loc, guessed_id);
error_at_rich_loc
(&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
type, component, guessed_id);
error_at (&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
type, component, guessed_id);
}
else
error_at (loc, "%qT has no member named %qE", type, component);
@ -2483,9 +2482,9 @@ build_component_ref (location_t loc, tree datum, tree component,
rich_location richloc (line_table, loc);
/* "loc" should be the "." token. */
richloc.add_fixit_replace ("->");
error_at_rich_loc (&richloc,
"%qE is a pointer; did you mean to use %<->%>?",
datum);
error_at (&richloc,
"%qE is a pointer; did you mean to use %<->%>?",
datum);
return error_mark_node;
}
else if (code != ERROR_MARK)
@ -4276,8 +4275,7 @@ build_unary_op (location_t location, enum tree_code code, tree xarg,
{
gcc_rich_location richloc (location);
richloc.add_fixit_insert_before (location, "!");
inform_at_rich_loc (&richloc, "did you mean to use logical "
"not?");
inform (&richloc, "did you mean to use logical not?");
}
if (!noconvert)
arg = default_conversion (arg);
@ -8256,9 +8254,9 @@ pop_init_level (location_t loc, int implicit,
&& !constructor_zeroinit)
{
gcc_assert (initializer_stack->missing_brace_richloc);
warning_at_rich_loc (initializer_stack->missing_brace_richloc,
OPT_Wmissing_braces,
"missing braces around initializer");
warning_at (initializer_stack->missing_brace_richloc,
OPT_Wmissing_braces,
"missing braces around initializer");
}
/* Warn when some struct elements are implicitly initialized to zero. */
@ -8580,10 +8578,9 @@ set_init_label (location_t loc, tree fieldname, location_t fieldname_loc,
{
gcc_rich_location rich_loc (fieldname_loc);
rich_loc.add_fixit_misspelled_id (fieldname_loc, guessed_id);
error_at_rich_loc
(&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
constructor_type, fieldname, guessed_id);
error_at (&rich_loc,
"%qT has no member named %qE; did you mean %qE?",
constructor_type, fieldname, guessed_id);
}
else
error_at (fieldname_loc, "%qT has no member named %qE",

View File

@ -1,3 +1,40 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
than 0.
* name-lookup.c (suggest_alternatives_for): Update for renaming of
inform_at_rich_loc.
(maybe_suggest_missing_header): Likewise.
(suggest_alternative_in_explicit_scope): Likewise.
* parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
renaming of error_at_rich_loc.
(cp_parser_string_literal): Likewise.
(cp_parser_nested_name_specifier_opt): Likewise.
(cp_parser_cast_expression): Likewise for renaming of
warning_at_rich_loc.
(cp_parser_decl_specifier_seq): Likewise for renaming of
error_at_rich_loc and warning_at_rich_loc.
(cp_parser_elaborated_type_specifier): Likewise for renaming of
pedwarn_at_rich_loc.
(cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
error_at_rich_loc.
(cp_parser_virt_specifier_seq_opt): Likewise.
(cp_parser_class_specifier_1): Likewise.
(cp_parser_class_head): Likewise.
(cp_parser_member_declaration): Likewise for renaming of
pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
(cp_parser_enclosed_template_argument_list): Likewise for renaming
of error_at_rich_loc.
(set_and_check_decl_spec_loc): Likewise.
* pt.c (listify): Likewise.
* rtti.c (typeid_ok_p): Likewise.
* semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
than 0.
* typeck.c (access_failure_info::maybe_suggest_accessor): Update
for renaming of inform_at_rich_loc.
(finish_class_member_access_expr): Likewise for renaming of
error_at_rich_loc.
2017-10-31 Nathan Sidwell <nathan@acm.org>
* cp-tree.h (struct operator_name_info_t): Rename to ...

View File

@ -5394,18 +5394,20 @@ explain_non_literal_class (tree t)
/* Already explained. */
return;
inform (0, "%q+T is not literal because:", t);
inform (UNKNOWN_LOCATION, "%q+T is not literal because:", t);
if (cxx_dialect < cxx17 && LAMBDA_TYPE_P (t))
inform (0, " %qT is a closure type, which is only literal in "
inform (UNKNOWN_LOCATION,
" %qT is a closure type, which is only literal in "
"C++17 and later", t);
else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t))
inform (0, " %q+T has a non-trivial destructor", t);
inform (UNKNOWN_LOCATION, " %q+T has a non-trivial destructor", t);
else if (CLASSTYPE_NON_AGGREGATE (t)
&& !TYPE_HAS_TRIVIAL_DFLT (t)
&& !LAMBDA_TYPE_P (t)
&& !TYPE_HAS_CONSTEXPR_CTOR (t))
{
inform (0, " %q+T is not an aggregate, does not have a trivial "
inform (UNKNOWN_LOCATION,
" %q+T is not an aggregate, does not have a trivial "
"default constructor, and has no constexpr constructor that "
"is not a copy or move constructor", t);
if (type_has_non_user_provided_default_constructor (t))
@ -5437,7 +5439,8 @@ explain_non_literal_class (tree t)
tree basetype = TREE_TYPE (base_binfo);
if (!CLASSTYPE_LITERAL_P (basetype))
{
inform (0, " base class %qT of %q+T is non-literal",
inform (UNKNOWN_LOCATION,
" base class %qT of %q+T is non-literal",
basetype, t);
explain_non_literal_class (basetype);
return;

View File

@ -5377,7 +5377,7 @@ suggest_alternatives_for (location_t location, tree name,
gcc_rich_location richloc (location);
richloc.add_fixit_replace (fuzzy);
inform_at_rich_loc (&richloc, "suggested alternative: %qs", fuzzy);
inform (&richloc, "suggested alternative: %qs", fuzzy);
}
}
@ -5485,10 +5485,10 @@ maybe_suggest_missing_header (location_t location, tree name, tree scope)
gcc_rich_location richloc (location);
maybe_add_include_fixit (&richloc, header_hint);
inform_at_rich_loc (&richloc,
"%<std::%s%> is defined in header %qs;"
" did you forget to %<#include %s%>?",
name_str, header_hint, header_hint);
inform (&richloc,
"%<std::%s%> is defined in header %qs;"
" did you forget to %<#include %s%>?",
name_str, header_hint, header_hint);
return true;
}
@ -5518,8 +5518,8 @@ suggest_alternative_in_explicit_scope (location_t location, tree name,
{
gcc_rich_location richloc (location);
richloc.add_fixit_replace (fuzzy_name);
inform_at_rich_loc (&richloc, "suggested alternative: %qs",
fuzzy_name);
inform (&richloc, "suggested alternative: %qs",
fuzzy_name);
return true;
}

View File

@ -3294,9 +3294,9 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id,
{
gcc_rich_location richloc (location);
richloc.add_fixit_replace (suggestion);
error_at_rich_loc (&richloc,
"%qE does not name a type; did you mean %qs?",
id, suggestion);
error_at (&richloc,
"%qE does not name a type; did you mean %qs?",
id, suggestion);
}
else
error_at (location, "%qE does not name a type", id);
@ -4107,9 +4107,9 @@ cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok,
{
rich_location rich_loc (line_table, tok->location);
rich_loc.add_range (last_tok_loc, false);
error_at_rich_loc (&rich_loc,
"unsupported non-standard concatenation "
"of string literals");
error_at (&rich_loc,
"unsupported non-standard concatenation "
"of string literals");
}
}
@ -6163,9 +6163,9 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser,
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_replace ("::");
error_at_rich_loc (&richloc,
"found %<:%> in nested-name-specifier, "
"expected %<::%>");
error_at (&richloc,
"found %<:%> in nested-name-specifier, "
"expected %<::%>");
token->type = CPP_SCOPE;
}
@ -9097,8 +9097,8 @@ cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
gcc_rich_location rich_loc (input_location);
maybe_add_cast_fixit (&rich_loc, open_paren_loc, close_paren_loc,
expr, type);
warning_at_rich_loc (&rich_loc, OPT_Wold_style_cast,
"use of old-style cast to %q#T", type);
warning_at (&rich_loc, OPT_Wold_style_cast,
"use of old-style cast to %q#T", type);
}
/* Only type conversions to integral or enumeration types
@ -13549,7 +13549,7 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "%<friend%> used outside of class");
error_at (&richloc, "%<friend%> used outside of class");
cp_lexer_purge_token (parser->lexer);
}
else
@ -13615,9 +13615,9 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
we're complaining about C++0x compatibility. */
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
warning_at_rich_loc (&richloc, OPT_Wc__11_compat,
"%<auto%> changes meaning in C++11; "
"please remove it");
warning_at (&richloc, OPT_Wc__11_compat,
"%<auto%> changes meaning in C++11; "
"please remove it");
/* Set the storage class anyway. */
cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
@ -17661,9 +17661,9 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
gcc_rich_location richloc (token->location);
richloc.add_range (input_location, false);
richloc.add_fixit_remove ();
pedwarn_at_rich_loc (&richloc, 0, "elaborated-type-specifier for "
"a scoped enum must not use the %qD keyword",
token->u.value);
pedwarn (&richloc, 0, "elaborated-type-specifier for "
"a scoped enum must not use the %qD keyword",
token->u.value);
/* Consume the `struct' or `class' and parse it anyway. */
cp_lexer_consume_token (parser->lexer);
}
@ -20659,7 +20659,7 @@ cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "duplicate cv-qualifier");
error_at (&richloc, "duplicate cv-qualifier");
cp_lexer_purge_token (parser->lexer);
}
else
@ -20808,7 +20808,7 @@ cp_parser_virt_specifier_seq_opt (cp_parser* parser)
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "duplicate virt-specifier");
error_at (&richloc, "duplicate virt-specifier");
cp_lexer_purge_token (parser->lexer);
}
else
@ -22606,14 +22606,14 @@ cp_parser_class_specifier_1 (cp_parser* parser)
richloc.add_fixit_insert_before (next_loc, ";");
if (CLASSTYPE_DECLARED_CLASS (type))
error_at_rich_loc (&richloc,
"expected %<;%> after class definition");
error_at (&richloc,
"expected %<;%> after class definition");
else if (TREE_CODE (type) == RECORD_TYPE)
error_at_rich_loc (&richloc,
"expected %<;%> after struct definition");
error_at (&richloc,
"expected %<;%> after struct definition");
else if (TREE_CODE (type) == UNION_TYPE)
error_at_rich_loc (&richloc,
"expected %<;%> after union definition");
error_at (&richloc,
"expected %<;%> after union definition");
else
gcc_unreachable ();
@ -23060,9 +23060,9 @@ cp_parser_class_head (cp_parser* parser,
rich_location richloc (line_table, reported_loc);
richloc.add_fixit_insert_before (class_head_start_location,
"template <> ");
error_at_rich_loc
(&richloc,
"an explicit specialization must be preceded by %<template <>%>");
error_at (&richloc,
"an explicit specialization must be preceded by"
" %<template <>%>");
invalid_explicit_specialization_p = true;
/* Take the same action that would have been taken by
cp_parser_explicit_specialization. */
@ -23530,7 +23530,7 @@ cp_parser_member_declaration (cp_parser* parser)
{
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
pedwarn_at_rich_loc (&richloc, OPT_Wpedantic, "extra %<;%>");
pedwarn (&richloc, OPT_Wpedantic, "extra %<;%>");
}
}
else
@ -23873,9 +23873,9 @@ cp_parser_member_declaration (cp_parser* parser)
= cp_lexer_consume_token (parser->lexer)->location;
gcc_rich_location richloc (semicolon_loc);
richloc.add_fixit_remove ();
warning_at_rich_loc (&richloc, OPT_Wextra_semi,
"extra %<;%> after in-class "
"function definition");
warning_at (&richloc, OPT_Wextra_semi,
"extra %<;%> after in-class "
"function definition");
}
goto out;
}
@ -23918,8 +23918,8 @@ cp_parser_member_declaration (cp_parser* parser)
cp_token *token = cp_lexer_previous_token (parser->lexer);
gcc_rich_location richloc (token->location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "stray %<,%> at end of "
"member declaration");
error_at (&richloc, "stray %<,%> at end of "
"member declaration");
}
}
/* If the next token isn't a `;', then we have a parse error. */
@ -23932,8 +23932,8 @@ cp_parser_member_declaration (cp_parser* parser)
cp_token *token = cp_lexer_previous_token (parser->lexer);
gcc_rich_location richloc (token->location);
richloc.add_fixit_insert_after (";");
error_at_rich_loc (&richloc, "expected %<;%> at end of "
"member declaration");
error_at (&richloc, "expected %<;%> at end of "
"member declaration");
/* Assume that the user meant to provide a semicolon. If
we were to cp_parser_skip_to_end_of_statement, we might
@ -27544,8 +27544,8 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser)
cp_token *token = cp_lexer_peek_token (parser->lexer);
gcc_rich_location richloc (token->location);
richloc.add_fixit_replace ("> >");
error_at_rich_loc (&richloc, "%<>>%> should be %<> >%> "
"within a nested template argument list");
error_at (&richloc, "%<>>%> should be %<> >%> "
"within a nested template argument list");
token->type = CPP_GREATER;
}
@ -28174,7 +28174,7 @@ set_and_check_decl_spec_loc (cp_decl_specifier_seq *decl_specs,
{
gcc_rich_location richloc (location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "duplicate %qD", token->u.value);
error_at (&richloc, "duplicate %qD", token->u.value);
}
}
else
@ -28198,7 +28198,7 @@ set_and_check_decl_spec_loc (cp_decl_specifier_seq *decl_specs,
};
gcc_rich_location richloc (location);
richloc.add_fixit_remove ();
error_at_rich_loc (&richloc, "duplicate %qs", decl_spec_names[ds]);
error_at (&richloc, "duplicate %qs", decl_spec_names[ds]);
}
}
}

View File

@ -25130,9 +25130,9 @@ listify (tree arg)
{
gcc_rich_location richloc (input_location);
maybe_add_include_fixit (&richloc, "<initializer_list>");
error_at_rich_loc (&richloc,
"deducing from brace-enclosed initializer list"
" requires #include <initializer_list>");
error_at (&richloc,
"deducing from brace-enclosed initializer list"
" requires #include <initializer_list>");
return error_mark_node;
}

View File

@ -319,9 +319,9 @@ typeid_ok_p (void)
{
gcc_rich_location richloc (input_location);
maybe_add_include_fixit (&richloc, "<typeinfo>");
error_at_rich_loc (&richloc,
"must %<#include <typeinfo>%> before using"
" %<typeid%>");
error_at (&richloc,
"must %<#include <typeinfo>%> before using"
" %<typeid%>");
return false;
}

View File

@ -3399,7 +3399,7 @@ process_outer_var_ref (tree decl, tsubst_flags_t complain, bool force_use)
inform (location_of (closure),
"the lambda has no capture-default");
else if (TYPE_CLASS_SCOPE_P (closure))
inform (0, "lambda in local class %q+T cannot "
inform (UNKNOWN_LOCATION, "lambda in local class %q+T cannot "
"capture variables from the enclosing context",
TYPE_CONTEXT (closure));
inform (DECL_SOURCE_LOCATION (decl), "%q#D declared here", decl);

View File

@ -2677,8 +2677,8 @@ access_failure_info::maybe_suggest_accessor (bool const_p) const
pretty_printer pp;
pp_printf (&pp, "%s()", IDENTIFIER_POINTER (DECL_NAME (accessor)));
richloc.add_fixit_replace (pp_formatted_text (&pp));
inform_at_rich_loc (&richloc, "field %q#D can be accessed via %q#D",
m_field_decl, accessor);
inform (&richloc, "field %q#D can be accessed via %q#D",
m_field_decl, accessor);
}
/* This function is called by the parser to process a class member
@ -2883,12 +2883,12 @@ finish_class_member_access_expr (cp_expr object, tree name, bool template_p,
gcc_rich_location rich_loc (bogus_component_loc);
rich_loc.add_fixit_misspelled_id (bogus_component_loc,
guessed_id);
error_at_rich_loc
(&rich_loc,
"%q#T has no member named %qE; did you mean %qE?",
TREE_CODE (access_path) == TREE_BINFO
? TREE_TYPE (access_path) : object_type, name,
guessed_id);
error_at (&rich_loc,
"%q#T has no member named %qE;"
" did you mean %qE?",
TREE_CODE (access_path) == TREE_BINFO
? TREE_TYPE (access_path) : object_type,
name, guessed_id);
}
else
error ("%q#T has no member named %qE",

View File

@ -61,33 +61,32 @@ extern void internal_error_no_backtrace (const char *, ...)
extern bool warning (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
extern bool warning_n (location_t, int, int, const char *, const char *, ...)
ATTRIBUTE_GCC_DIAG(4,6) ATTRIBUTE_GCC_DIAG(5,6);
extern bool warning_n (rich_location *, int, int, const char *,
const char *, ...)
ATTRIBUTE_GCC_DIAG(4, 6) ATTRIBUTE_GCC_DIAG(5, 6);
extern bool warning_at (location_t, int, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
extern bool warning_at_rich_loc (rich_location *, int, const char *, ...)
extern bool warning_at (rich_location *, int, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
extern bool warning_at_rich_loc_n (rich_location *, int, int, const char *,
const char *, ...)
ATTRIBUTE_GCC_DIAG(4, 6) ATTRIBUTE_GCC_DIAG(5, 6);
extern void error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
extern void error_n (location_t, int, const char *, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
extern void error_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
extern void error_at_rich_loc (rich_location *, const char *, ...)
extern void error_at (rich_location *, const char *, ...)
ATTRIBUTE_GCC_DIAG(2,3);
extern void fatal_error (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3)
ATTRIBUTE_NORETURN;
/* Pass one of the OPT_W* from options.h as the second parameter. */
extern bool pedwarn (location_t, int, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
extern bool pedwarn_at_rich_loc (rich_location *, int, const char *, ...)
extern bool pedwarn (rich_location *, int, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,4);
extern bool permerror (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
extern bool permerror_at_rich_loc (rich_location *, const char *,
extern bool permerror (rich_location *, const char *,
...) ATTRIBUTE_GCC_DIAG(2,3);
extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
extern void inform_at_rich_loc (rich_location *, const char *,
...) ATTRIBUTE_GCC_DIAG(2,3);
extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
extern void inform_n (location_t, int, const char *, const char *, ...)
ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);

View File

@ -50,12 +50,9 @@ along with GCC; see the file COPYING3. If not see
/* Prototypes. */
static bool diagnostic_impl (rich_location *, int, const char *,
va_list *, diagnostic_t) ATTRIBUTE_GCC_DIAG(3,0);
static bool diagnostic_n_impl (location_t, int, int, const char *,
static bool diagnostic_n_impl (rich_location *, int, int, const char *,
const char *, va_list *,
diagnostic_t) ATTRIBUTE_GCC_DIAG(5,0);
static bool diagnostic_n_impl_richloc (rich_location *, int, int, const char *,
const char *, va_list *,
diagnostic_t) ATTRIBUTE_GCC_DIAG(5,0);
static void error_recursion (diagnostic_context *) ATTRIBUTE_NORETURN;
static void real_abort (void) ATTRIBUTE_NORETURN;
@ -1074,10 +1071,9 @@ diagnostic_append_note (diagnostic_context *context,
va_end (ap);
}
/* Implement emit_diagnostic, inform, inform_at_rich_loc, warning, warning_at,
warning_at_rich_loc, pedwarn, permerror, permerror_at_rich_loc, error,
error_at, error_at_rich_loc, sorry, fatal_error, internal_error, and
internal_error_no_backtrace, as documented and defined below. */
/* Implement emit_diagnostic, inform, warning, warning_at, pedwarn,
permerror, error, error_at, error_at, sorry, fatal_error, internal_error,
and internal_error_no_backtrace, as documented and defined below. */
static bool
diagnostic_impl (rich_location *richloc, int opt,
const char *gmsgid,
@ -1099,12 +1095,13 @@ diagnostic_impl (rich_location *richloc, int opt,
return diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* Same as diagonostic_n_impl taking rich_location instead of location_t. */
/* Implement inform_n, warning_n, and error_n, as documented and
defined below. */
static bool
diagnostic_n_impl_richloc (rich_location *richloc, int opt, int n,
const char *singular_gmsgid,
const char *plural_gmsgid,
va_list *ap, diagnostic_t kind)
diagnostic_n_impl (rich_location *richloc, int opt, int n,
const char *singular_gmsgid,
const char *plural_gmsgid,
va_list *ap, diagnostic_t kind)
{
diagnostic_info diagnostic;
diagnostic_set_info_translated (&diagnostic,
@ -1113,19 +1110,6 @@ diagnostic_n_impl_richloc (rich_location *richloc, int opt, int n,
if (kind == DK_WARNING)
diagnostic.option_index = opt;
return diagnostic_report_diagnostic (global_dc, &diagnostic);
}
/* Implement inform_n, warning_n, and error_n, as documented and
defined below. */
static bool
diagnostic_n_impl (location_t location, int opt, int n,
const char *singular_gmsgid,
const char *plural_gmsgid,
va_list *ap, diagnostic_t kind)
{
rich_location richloc (line_table, location);
return diagnostic_n_impl_richloc (&richloc, opt, n,
singular_gmsgid, plural_gmsgid, ap, kind);
}
/* Wrapper around diagnostic_impl taking a variable argument list. */
@ -1164,10 +1148,12 @@ inform (location_t location, const char *gmsgid, ...)
va_end (ap);
}
/* Same as "inform", but at RICHLOC. */
/* Same as "inform" above, but at RICHLOC. */
void
inform_at_rich_loc (rich_location *richloc, const char *gmsgid, ...)
inform (rich_location *richloc, const char *gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, gmsgid);
diagnostic_impl (richloc, -1, gmsgid, &ap, DK_NOTE);
@ -1182,7 +1168,8 @@ inform_n (location_t location, int n, const char *singular_gmsgid,
{
va_list ap;
va_start (ap, plural_gmsgid);
diagnostic_n_impl (location, -1, n, singular_gmsgid, plural_gmsgid,
rich_location richloc (line_table, location);
diagnostic_n_impl (&richloc, -1, n, singular_gmsgid, plural_gmsgid,
&ap, DK_NOTE);
va_end (ap);
}
@ -1216,11 +1203,13 @@ warning_at (location_t location, int opt, const char *gmsgid, ...)
return ret;
}
/* Same as warning at, but using RICHLOC. */
/* Same as "warning at" above, but using RICHLOC. */
bool
warning_at_rich_loc (rich_location *richloc, int opt, const char *gmsgid, ...)
warning_at (rich_location *richloc, int opt, const char *gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, gmsgid);
bool ret = diagnostic_impl (richloc, opt, gmsgid, &ap, DK_WARNING);
@ -1228,17 +1217,19 @@ warning_at_rich_loc (rich_location *richloc, int opt, const char *gmsgid, ...)
return ret;
}
/* Same as warning_at_rich_loc but for plural variant. */
/* Same as warning_n plural variant below, but using RICHLOC. */
bool
warning_at_rich_loc_n (rich_location *richloc, int opt, int n,
const char *singular_gmsgid, const char *plural_gmsgid, ...)
warning_n (rich_location *richloc, int opt, int n,
const char *singular_gmsgid, const char *plural_gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, plural_gmsgid);
bool ret = diagnostic_n_impl_richloc (richloc, opt, n,
singular_gmsgid, plural_gmsgid,
&ap, DK_WARNING);
bool ret = diagnostic_n_impl (richloc, opt, n,
singular_gmsgid, plural_gmsgid,
&ap, DK_WARNING);
va_end (ap);
return ret;
}
@ -1253,7 +1244,8 @@ warning_n (location_t location, int opt, int n, const char *singular_gmsgid,
{
va_list ap;
va_start (ap, plural_gmsgid);
bool ret = diagnostic_n_impl (location, opt, n,
rich_location richloc (line_table, location);
bool ret = diagnostic_n_impl (&richloc, opt, n,
singular_gmsgid, plural_gmsgid,
&ap, DK_WARNING);
va_end (ap);
@ -1284,11 +1276,13 @@ pedwarn (location_t location, int opt, const char *gmsgid, ...)
return ret;
}
/* Same as pedwarn, but using RICHLOC. */
/* Same as pedwarn above, but using RICHLOC. */
bool
pedwarn_at_rich_loc (rich_location *richloc, int opt, const char *gmsgid, ...)
pedwarn (rich_location *richloc, int opt, const char *gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, gmsgid);
bool ret = diagnostic_impl (richloc, opt, gmsgid, &ap, DK_PEDWARN);
@ -1314,11 +1308,13 @@ permerror (location_t location, const char *gmsgid, ...)
return ret;
}
/* Same as "permerror", but at RICHLOC. */
/* Same as "permerror" above, but at RICHLOC. */
bool
permerror_at_rich_loc (rich_location *richloc, const char *gmsgid, ...)
permerror (rich_location *richloc, const char *gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, gmsgid);
bool ret = diagnostic_impl (richloc, -1, gmsgid, &ap, DK_PERMERROR);
@ -1346,7 +1342,8 @@ error_n (location_t location, int n, const char *singular_gmsgid,
{
va_list ap;
va_start (ap, plural_gmsgid);
diagnostic_n_impl (location, -1, n, singular_gmsgid, plural_gmsgid,
rich_location richloc (line_table, location);
diagnostic_n_impl (&richloc, -1, n, singular_gmsgid, plural_gmsgid,
&ap, DK_ERROR);
va_end (ap);
}
@ -1365,8 +1362,10 @@ error_at (location_t loc, const char *gmsgid, ...)
/* Same as above, but use RICH_LOC. */
void
error_at_rich_loc (rich_location *richloc, const char *gmsgid, ...)
error_at (rich_location *richloc, const char *gmsgid, ...)
{
gcc_assert (richloc);
va_list ap;
va_start (ap, gmsgid);
diagnostic_impl (richloc, -1, gmsgid, &ap, DK_ERROR);

View File

@ -5315,7 +5315,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
buf = (char *) alloca (p - q + 1);
strncpy (buf, q, p - q);
buf[p - q] = 0;
inform (0, "%s", _(buf));
inform (UNKNOWN_LOCATION, "%s", _(buf));
if (*p)
p++;
}
@ -8192,7 +8192,8 @@ driver::do_spec_on_infiles () const
else if (compare_debug && debug_check_temp_file[0])
{
if (verbose_flag)
inform (0, "recompiling with -fcompare-debug");
inform (UNKNOWN_LOCATION,
"recompiling with -fcompare-debug");
compare_debug = -compare_debug;
n_switches = n_switches_debug_check[1];
@ -8217,7 +8218,7 @@ driver::do_spec_on_infiles () const
debug_check_temp_file[1]));
if (verbose_flag)
inform (0, "comparing final insns dumps");
inform (UNKNOWN_LOCATION, "comparing final insns dumps");
if (compare_files (debug_check_temp_file))
this_file_error = 1;

View File

@ -1,3 +1,8 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* objc-gnu-runtime-abi-01.c (objc_gnu_runtime_abi_01_init): Use
UNKNOWN_LOCATION rather than 0.
2017-10-17 Nathan Sidwell <nathan@acm.org>
* objc-act.c (objc_common_tree_size): Return size of TYPE nodes.

View File

@ -130,7 +130,8 @@ objc_gnu_runtime_abi_01_init (objc_runtime_hooks *rthooks)
/* GNU runtime does not need the compiler to change code in order to do GC. */
if (flag_objc_gc)
{
warning_at (0, 0, "%<-fobjc-gc%> is ignored for %<-fgnu-runtime%>");
warning_at (UNKNOWN_LOCATION, 0,
"%<-fobjc-gc%> is ignored for %<-fgnu-runtime%>");
flag_objc_gc = 0;
}

View File

@ -155,8 +155,8 @@ format_warning_va (const substring_loc &fmt_loc,
if (corrected_substring)
substring_richloc.add_fixit_replace (fmt_substring_range,
corrected_substring);
inform_at_rich_loc (&substring_richloc,
"format string is defined here");
inform (&substring_richloc,
"format string is defined here");
}
return warned;

View File

@ -1,3 +1,10 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update
for renaming of error_at_rich_loc and inform_at_rich_loc.
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
(test_show_locus): Likewise for renaming of warning_at_rich_loc.
2017-10-31 Martin Liska <mliska@suse.cz>
* g++.dg/gcov/loop.C: New test.

View File

@ -45,14 +45,14 @@ show_tree (tree node)
if (richloc.get_num_locations () < 2)
{
error_at_rich_loc (&richloc, "range not found");
error_at (&richloc, "range not found");
return;
}
enum tree_code code = TREE_CODE (node);
location_range *range = richloc.get_range (1);
inform_at_rich_loc (&richloc, "%s", get_tree_code_name (code));
inform (&richloc, "%s", get_tree_code_name (code));
/* Recurse. */
int min_idx = 0;

View File

@ -176,7 +176,7 @@ test_show_locus (function *fun)
rich_location richloc (line_table, get_loc (line, 15));
add_range (&richloc, get_loc (line, 10), get_loc (line, 14), false);
add_range (&richloc, get_loc (line, 16), get_loc (line, 16), false);
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
}
if (0 == strcmp (fnname, "test_simple_2"))
@ -185,7 +185,7 @@ test_show_locus (function *fun)
rich_location richloc (line_table, get_loc (line, 24));
add_range (&richloc, get_loc (line, 6), get_loc (line, 22), false);
add_range (&richloc, get_loc (line, 26), get_loc (line, 43), false);
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
}
if (0 == strcmp (fnname, "test_multiline"))
@ -195,7 +195,7 @@ test_show_locus (function *fun)
add_range (&richloc, get_loc (line, 7), get_loc (line, 23), false);
add_range (&richloc, get_loc (line + 1, 9), get_loc (line + 1, 26),
false);
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
}
if (0 == strcmp (fnname, "test_many_lines"))
@ -205,7 +205,7 @@ test_show_locus (function *fun)
add_range (&richloc, get_loc (line, 7), get_loc (line + 4, 65), false);
add_range (&richloc, get_loc (line + 5, 9), get_loc (line + 10, 61),
false);
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
}
/* Example of a rich_location where the range is larger than
@ -216,7 +216,7 @@ test_show_locus (function *fun)
location_t start = get_loc (line, 12);
location_t finish = get_loc (line, 16);
rich_location richloc (line_table, make_location (start, start, finish));
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
}
/* Example of a single-range location where the range starts
@ -251,7 +251,7 @@ test_show_locus (function *fun)
add_range (&richloc, caret_b, caret_b, true);
global_dc->caret_chars[0] = 'A';
global_dc->caret_chars[1] = 'B';
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
global_dc->caret_chars[0] = '^';
global_dc->caret_chars[1] = '^';
}
@ -265,7 +265,7 @@ test_show_locus (function *fun)
rich_location richloc (line_table, make_location (start, start, finish));
richloc.add_fixit_insert_before ("{");
richloc.add_fixit_insert_after ("}");
warning_at_rich_loc (&richloc, 0, "example of insertion hints");
warning_at (&richloc, 0, "example of insertion hints");
}
if (0 == strcmp (fnname, "test_fixit_insert_newline"))
@ -277,7 +277,7 @@ test_show_locus (function *fun)
location_t case_loc = make_location (case_start, case_start, case_finish);
rich_location richloc (line_table, case_loc);
richloc.add_fixit_insert_before (line_start, " break;\n");
warning_at_rich_loc (&richloc, 0, "example of newline insertion hint");
warning_at (&richloc, 0, "example of newline insertion hint");
}
if (0 == strcmp (fnname, "test_fixit_remove"))
@ -290,7 +290,7 @@ test_show_locus (function *fun)
src_range.m_start = start;
src_range.m_finish = finish;
richloc.add_fixit_remove (src_range);
warning_at_rich_loc (&richloc, 0, "example of a removal hint");
warning_at (&richloc, 0, "example of a removal hint");
}
if (0 == strcmp (fnname, "test_fixit_replace"))
@ -303,7 +303,7 @@ test_show_locus (function *fun)
src_range.m_start = start;
src_range.m_finish = finish;
richloc.add_fixit_replace (src_range, "gtk_widget_show_all");
warning_at_rich_loc (&richloc, 0, "example of a replacement hint");
warning_at (&richloc, 0, "example of a replacement hint");
}
if (0 == strcmp (fnname, "test_mutually_exclusive_suggestions"))
@ -319,14 +319,14 @@ test_show_locus (function *fun)
rich_location richloc (line_table, make_location (start, start, finish));
richloc.add_fixit_replace (src_range, "replacement_1");
richloc.fixits_cannot_be_auto_applied ();
warning_at_rich_loc (&richloc, 0, "warning 1");
warning_at (&richloc, 0, "warning 1");
}
{
rich_location richloc (line_table, make_location (start, start, finish));
richloc.add_fixit_replace (src_range, "replacement_2");
richloc.fixits_cannot_be_auto_applied ();
warning_at_rich_loc (&richloc, 0, "warning 2");
warning_at (&richloc, 0, "warning 2");
}
}
@ -346,7 +346,7 @@ test_show_locus (function *fun)
richloc.add_range (caret_b, true);
global_dc->caret_chars[0] = '1';
global_dc->caret_chars[1] = '2';
warning_at_rich_loc (&richloc, 0, "test");
warning_at (&richloc, 0, "test");
global_dc->caret_chars[0] = '^';
global_dc->caret_chars[1] = '^';
}
@ -411,8 +411,8 @@ test_show_locus (function *fun)
statically-allocated buffer in class rich_location,
and then trigger a reallocation of the dynamic buffer. */
gcc_assert (richloc.get_num_locations () > 3 + (2 * 16));
warning_at_rich_loc (&richloc, 0, "test of %i locations",
richloc.get_num_locations ());
warning_at (&richloc, 0, "test of %i locations",
richloc.get_num_locations ());
}
}

View File

@ -1,3 +1,19 @@
2017-10-31 David Malcolm <dmalcolm@redhat.com>
* directives.c (_cpp_handle_directive): Update for renaming of
cpp_error_at_richloc to cpp_error_at.
* errors.c (cpp_diagnostic_at_richloc): Rename to...
(cpp_diagnostic_at): ...this, dropping the location_t-based
implementation.
(cpp_diagnostic): Update for removal of location_t-based
cpp_diagnostic_at.
(cpp_error_at): Likewise.
(cpp_error_at_richloc): Rename to...
(cpp_error_at): ...this, and update for renaming of
cpp_diagnostic_at_richloc.
* include/cpplib.h (cpp_error_at_richloc): Rename to...
(cpp_error_at): ...this.
2017-10-30 Joseph Myers <joseph@codesourcery.com>
* include/cpplib.h (enum c_lang): Add CLK_GNUC17 and CLK_STDC17.

View File

@ -527,10 +527,10 @@ _cpp_handle_directive (cpp_reader *pfile, int indented)
source_range misspelled_token_range
= get_range_from_loc (pfile->line_table, dname->src_loc);
richloc.add_fixit_replace (misspelled_token_range, hint);
cpp_error_at_richloc (pfile, CPP_DL_ERROR, &richloc,
"invalid preprocessing directive #%s;"
" did you mean #%s?",
unrecognized, hint);
cpp_error_at (pfile, CPP_DL_ERROR, &richloc,
"invalid preprocessing directive #%s;"
" did you mean #%s?",
unrecognized, hint);
}
else
cpp_error (pfile, CPP_DL_ERROR,

View File

@ -29,35 +29,17 @@ along with this program; see the file COPYING3. If not see
/* Print a diagnostic at the given location. */
ATTRIBUTE_FPTR_PRINTF(5,0)
static bool
cpp_diagnostic_at_richloc (cpp_reader * pfile, int level, int reason,
rich_location *richloc,
const char *msgid, va_list *ap)
{
bool ret;
if (!pfile->cb.error)
abort ();
ret = pfile->cb.error (pfile, level, reason, richloc, _(msgid), ap);
return ret;
}
/* Print a diagnostic at the given location. */
ATTRIBUTE_FPTR_PRINTF(5,0)
static bool
cpp_diagnostic_at (cpp_reader * pfile, int level, int reason,
source_location src_loc,
rich_location *richloc,
const char *msgid, va_list *ap)
{
bool ret;
if (!pfile->cb.error)
abort ();
rich_location richloc (pfile->line_table, src_loc);
ret = pfile->cb.error (pfile, level, reason, &richloc, _(msgid), ap);
ret = pfile->cb.error (pfile, level, reason, richloc, _(msgid), ap);
return ret;
}
@ -88,7 +70,8 @@ cpp_diagnostic (cpp_reader * pfile, int level, int reason,
{
src_loc = pfile->cur_token[-1].src_loc;
}
return cpp_diagnostic_at (pfile, level, reason, src_loc, msgid, ap);
rich_location richloc (pfile->line_table, src_loc);
return cpp_diagnostic_at (pfile, level, reason, &richloc, msgid, ap);
}
/* Print a warning or error, depending on the value of LEVEL. */
@ -265,7 +248,8 @@ cpp_error_at (cpp_reader * pfile, int level, source_location src_loc,
va_start (ap, msgid);
ret = cpp_diagnostic_at (pfile, level, CPP_W_NONE, src_loc,
rich_location richloc (pfile->line_table, src_loc);
ret = cpp_diagnostic_at (pfile, level, CPP_W_NONE, &richloc,
msgid, &ap);
va_end (ap);
@ -276,16 +260,16 @@ cpp_error_at (cpp_reader * pfile, int level, source_location src_loc,
a column override. */
bool
cpp_error_at_richloc (cpp_reader * pfile, int level, rich_location *richloc,
const char *msgid, ...)
cpp_error_at (cpp_reader * pfile, int level, rich_location *richloc,
const char *msgid, ...)
{
va_list ap;
bool ret;
va_start (ap, msgid);
ret = cpp_diagnostic_at_richloc (pfile, level, CPP_W_NONE, richloc,
msgid, &ap);
ret = cpp_diagnostic_at (pfile, level, CPP_W_NONE, richloc,
msgid, &ap);
va_end (ap);
return ret;

View File

@ -1096,9 +1096,9 @@ extern bool cpp_error_at (cpp_reader * pfile, int level,
source_location src_loc, const char *msgid, ...)
ATTRIBUTE_PRINTF_4;
extern bool cpp_error_at_richloc (cpp_reader * pfile, int level,
rich_location *richloc, const char *msgid,
...)
extern bool cpp_error_at (cpp_reader * pfile, int level,
rich_location *richloc, const char *msgid,
...)
ATTRIBUTE_PRINTF_4;
/* In lex.c */