Add sorry_at diagnostic function.
authorAndrew Stubbs <ams@codesourcery.com>
Tue, 11 Sep 2018 10:26:57 +0000 (10:26 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Tue, 11 Sep 2018 10:26:57 +0000 (10:26 +0000)
The plain "sorry" diagnostic only gives the "current" location, which is
typically the last line of the function or translation unit by time we get to
the back end.

GCN uses "sorry" to report unsupported language features, such as static
constructors, so it's useful to have a "sorry_at" variant.

This patch implements "sorry_at" according to the pattern of the other "at"
variants.

2018-09-11  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* diagnostic-core.h (sorry_at): New prototype.
* diagnostic.c (sorry_at): New function.

From-SVN: r264204

gcc/ChangeLog
gcc/diagnostic-core.h
gcc/diagnostic.c

index 608c6204fe175e6b757c0e1c44a48f16ea1feffe..fbe708b45957f5f155fc56366476ec125e48c73c 100644 (file)
@@ -1,3 +1,8 @@
+2018-09-11  Andrew Stubbs  <ams@codesourcery.com>
+
+       * diagnostic-core.h (sorry_at): New prototype.
+       * diagnostic.c (sorry_at): New function.
+
 2018-09-11  Aldy Hernandez  <aldyh@redhat.com>
 
        * tree-vrp (extract_range_from_binary_expr_1): Treat all divisions
index e4ebe005ede532b67e94387cf4dc4f8006230f96..80ff39541e6d581bd66c3dc47c178d339def7b6b 100644 (file)
@@ -96,6 +96,7 @@ extern bool permerror (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
 extern bool permerror (rich_location *, const char *,
                                   ...) ATTRIBUTE_GCC_DIAG(2,3);
 extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+extern void sorry_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
 extern void inform (location_t, 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, unsigned HOST_WIDE_INT, const char *,
index aae0934d21a66a6a336a995eb05ee4f54167ebb2..8575065069b5aa05285b6070c9e8328cdc211154 100644 (file)
@@ -1443,6 +1443,18 @@ sorry (const char *gmsgid, ...)
   va_end (ap);
 }
 
+/* Same as above, but use location LOC instead of input_location.  */
+void
+sorry_at (location_t loc, const char *gmsgid, ...)
+{
+  auto_diagnostic_group d;
+  va_list ap;
+  va_start (ap, gmsgid);
+  rich_location richloc (line_table, loc);
+  diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_SORRY);
+  va_end (ap);
+}
+
 /* Return true if an error or a "sorry" has been seen.  Various
    processing is disabled after errors.  */
 bool