From 64a5912c9ee9aac3d0b1583924a69f74022a989a Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Tue, 31 Oct 2017 20:21:58 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 40 +++++++++ gcc/auto-profile.c | 2 +- gcc/c-family/ChangeLog | 10 +++ gcc/c-family/c-common.c | 16 ++-- gcc/c-family/c-warn.c | 18 ++-- gcc/c/ChangeLog | 16 ++++ gcc/c/c-decl.c | 34 ++++---- gcc/c/c-parser.c | 41 +++++---- gcc/c/c-typeck.c | 29 +++---- gcc/cp/ChangeLog | 37 ++++++++ gcc/cp/class.c | 13 +-- gcc/cp/name-lookup.c | 14 +-- gcc/cp/parser.c | 82 ++++++++--------- gcc/cp/pt.c | 6 +- gcc/cp/rtti.c | 6 +- gcc/cp/semantics.c | 2 +- gcc/cp/typeck.c | 16 ++-- gcc/diagnostic-core.h | 17 ++-- gcc/diagnostic.c | 87 +++++++++---------- gcc/gcc.c | 7 +- gcc/objc/ChangeLog | 5 ++ gcc/objc/objc-gnu-runtime-abi-01.c | 3 +- gcc/substring-locations.c | 4 +- gcc/testsuite/ChangeLog | 7 ++ .../plugin/diagnostic_plugin_show_trees.c | 4 +- .../diagnostic_plugin_test_show_locus.c | 30 +++---- libcpp/ChangeLog | 16 ++++ libcpp/directives.c | 8 +- libcpp/errors.c | 36 +++----- libcpp/include/cpplib.h | 6 +- 30 files changed, 362 insertions(+), 250 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c059e5e9ff9..4987693efe30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c index 378f48037ede..130d8df5b1e4 100644 --- a/gcc/auto-profile.c +++ b/gcc/auto-profile.c @@ -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; } diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 6942d5f8954d..e8476426fcb1 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -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. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 8f36c77967fa..24077c72ae92 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -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 diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c index 78f6ba83d981..09ef6856cf90 100644 --- a/gcc/c-family/c-warn.c +++ b/gcc/c-family/c-warn.c @@ -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 diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 8bb9d372a778..60feeea90227 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -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 diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 78405c856756..d95a2b6ea4f3 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -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); diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 68c45fd87d2c..7bca5f1a2a7c 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -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); diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index cb9c589e061f..4bdc48a9ea38 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -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", diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 191fa111f6a7..4b92622d027c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 ... diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 9755f18cc4c9..98e62c6ad450 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -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; diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 1b35390cd9ef..b4976d8b7ccf 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -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; } diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index bcaefdec2ad0..77b96376e136 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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]); } } } diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 326be334d3b4..f525d2233cc4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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; } diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 5b2326cbbb63..10ecbfd95892 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -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; } diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index b513c4df575c..664952e749c6 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 38fd1583dc98..285d8d2fb111 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -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", diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h index 1fa28027b5b8..24025f1ef80b 100644 --- a/gcc/diagnostic-core.h +++ b/gcc/diagnostic-core.h @@ -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); diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index a98bf4a33334..9db4b46532d8 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -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); diff --git a/gcc/gcc.c b/gcc/gcc.c index d74c537af0e5..43e6d590c251 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -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; diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index a387814e9adc..7d8659289990 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -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. diff --git a/gcc/objc/objc-gnu-runtime-abi-01.c b/gcc/objc/objc-gnu-runtime-abi-01.c index b53d1820db3e..4321b365358e 100644 --- a/gcc/objc/objc-gnu-runtime-abi-01.c +++ b/gcc/objc/objc-gnu-runtime-abi-01.c @@ -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; } diff --git a/gcc/substring-locations.c b/gcc/substring-locations.c index 095e5d073a71..7de435b969f6 100644 --- a/gcc/substring-locations.c +++ b/gcc/substring-locations.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 37c15f06086c..42e634dbcc46 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c index f025f963e696..0bdd877dbd5a 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c index 0a8eeba1846d..9751e1cd25e9 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c @@ -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 ()); } } diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 785be4f94acb..39e12bda927f 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -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. diff --git a/libcpp/directives.c b/libcpp/directives.c index 7cac653dbbc1..e2952216c655 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -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, diff --git a/libcpp/errors.c b/libcpp/errors.c index 7fdee3c62540..d49c85324d83 100644 --- a/libcpp/errors.c +++ b/libcpp/errors.c @@ -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; diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index a2dc93da87ea..5a14858c44fc 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -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 */ -- GitLab