diagnostic-core.h (warning_at_rich_loc_n): Declare.
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
Sat, 8 Oct 2016 17:04:35 +0000 (17:04 +0000)
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>
Sat, 8 Oct 2016 17:04:35 +0000 (17:04 +0000)
2016-10-08  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

* diagnostic-core.h (warning_at_rich_loc_n): Declare.
* diagnostic.c (warning_at_rich_loc_n): New function.
(diagnostic_n_impl_richloc): Likewise.
(diagnostic_n_impl): Move most of the function to
diagnostic_n_impl_richloc and call it.

From-SVN: r240891

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

index 1685c7f95aa06e05c0dcc735b82e605a31b35676..92ea9a3f39dc2f5f84b5a2bb504190619ec6d8ed 100644 (file)
@@ -1,3 +1,11 @@
+2016-10-08  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
+
+       * diagnostic-core.h (warning_at_rich_loc_n): Declare.
+       * diagnostic.c (warning_at_rich_loc_n): New function.
+       (diagnostic_n_impl_richloc): Likewise.
+       (diagnostic_n_impl): Move most of the function to
+       diagnostic_n_impl_richloc and call it.
+
 2016-10-08  Jakub Jelinek  <jakub@redhat.com>
 
        * gen-pass-instances.awk: Rewritten.
index 51df15028d4c327dc414324a92f991f012c3d9b5..4a1766c1ab36565a9222100788ad1059cb7e0ed8 100644 (file)
@@ -65,6 +65,9 @@ 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 *, ...)
     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);
index 585028ec21185094ab1d9e1289ea4f1e339390fe..167a1b587664c2d412419d625a7d5a6aee3df852 100644 (file)
@@ -53,6 +53,10 @@ static bool diagnostic_impl (rich_location *, int, const char *,
 static bool diagnostic_n_impl (location_t, 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;
 
@@ -1064,6 +1068,22 @@ diagnostic_impl (rich_location *richloc, int opt,
   return report_diagnostic (&diagnostic);
 }
 
+/* Same as diagonostic_n_impl taking rich_location instead of location_t.  */
+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_info diagnostic;
+  diagnostic_set_info_translated (&diagnostic,
+                                  ngettext (singular_gmsgid, plural_gmsgid, n),
+                                  ap, richloc, kind);
+  if (kind == DK_WARNING)
+    diagnostic.option_index = opt;
+  return report_diagnostic (&diagnostic);
+} 
+
 /* Implement inform_n, warning_n, and error_n, as documented and
    defined below.  */
 static bool
@@ -1072,14 +1092,9 @@ diagnostic_n_impl (location_t location, int opt, int n,
                   const char *plural_gmsgid,
                   va_list *ap, diagnostic_t kind)
 {
-  diagnostic_info diagnostic;
   rich_location richloc (line_table, location);
-  diagnostic_set_info_translated (&diagnostic,
-                                  ngettext (singular_gmsgid, plural_gmsgid, n),
-                                  ap, &richloc, kind);
-  if (kind == DK_WARNING)
-    diagnostic.option_index = opt;
-  return report_diagnostic (&diagnostic);
+  return diagnostic_n_impl_richloc (&richloc, opt, n,
+                                   singular_gmsgid, plural_gmsgid, ap, kind);
 }
 
 bool
@@ -1170,6 +1185,21 @@ warning_at_rich_loc (rich_location *richloc, int opt, const char *gmsgid, ...)
   return ret;
 }
 
+/* Same as warning_at_rich_loc but for plural variant.  */
+
+bool
+warning_at_rich_loc_n (rich_location *richloc, int opt, int n,
+                      const char *singular_gmsgid, const char *plural_gmsgid, ...)
+{
+  va_list ap;
+  va_start (ap, plural_gmsgid);
+  bool ret = diagnostic_n_impl_richloc (richloc, opt, n,
+                                       singular_gmsgid, plural_gmsgid,
+                                       &ap, DK_WARNING);
+  va_end (ap);
+  return ret;
+}
+
 /* A warning at LOCATION.  Use this for code which is correct according to the
    relevant language specification but is likely to be buggy anyway.
    Returns true if the warning was printed, false if it was inhibited.  */