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
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 785be4f..39e12bd 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 7cac653..e295221 100644
--- a/libcpp/directives.c
+++ b/libcpp/directives.c
@@ -527,10 +527,10 @@
 	      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 7fdee3c..d49c853 100644
--- a/libcpp/errors.c
+++ b/libcpp/errors.c
@@ -31,33 +31,15 @@
 
 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 @@
     {
       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 @@
 
   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 @@
    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 a2dc93d..5a14858 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -1096,9 +1096,9 @@
 			  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 */