]> git.saurik.com Git - bison.git/blobdiff - src/complain.c
Merge remote-tracking branch 'origin/maint'
[bison.git] / src / complain.c
index 1162da29ea5c33dff99fdaa84bc16ab91e1c9b6d..fdc4b5426b490b0c74bfd785b0fa6c8c327daf8d 100644 (file)
@@ -63,10 +63,12 @@ static const char * const warnings_args[] =
   "conflicts-sr",
   "conflicts-rr",
   "deprecated",
   "conflicts-sr",
   "conflicts-rr",
   "deprecated",
+  "empty-rule",
   "precedence",
   "other",
   "all",
   "error",
   "precedence",
   "other",
   "all",
   "error",
+  "everything",
   0
 };
 
   0
 };
 
@@ -78,10 +80,12 @@ static const int warnings_types[] =
   Wconflicts_sr,
   Wconflicts_rr,
   Wdeprecated,
   Wconflicts_sr,
   Wconflicts_rr,
   Wdeprecated,
+  Wempty_rule,
   Wprecedence,
   Wother,
   Wall,
   Wprecedence,
   Wother,
   Wall,
-  Werror
+  Werror,
+  Weverything
 };
 
 ARGMATCH_VERIFY (warnings_args, warnings_types);
 };
 
 ARGMATCH_VERIFY (warnings_args, warnings_types);
@@ -92,10 +96,10 @@ warning_argmatch (char const *arg, size_t no, size_t err)
   int value = XARGMATCH ("--warning", arg + no + err,
                          warnings_args, warnings_types);
 
   int value = XARGMATCH ("--warning", arg + no + err,
                          warnings_args, warnings_types);
 
-  /* -Wnone == -Wno-all, and -Wno-none == -Wall.  */
+  /* -Wnone == -Wno-everything, and -Wno-none == -Weverything.  */
   if (!value)
     {
   if (!value)
     {
-      value = Wall;
+      value = Weverything;
       no = !no;
     }
 
       no = !no;
     }
 
@@ -143,7 +147,7 @@ warnings_argmatch (char *args)
       else if (STREQ (args, "no-error"))
         {
           warnings_are_errors = false;
       else if (STREQ (args, "no-error"))
         {
           warnings_are_errors = false;
-          warning_argmatch ("no-error=all", 3, 6);
+          warning_argmatch ("no-error=everything", 3, 6);
         }
       else
         {
         }
       else
         {
@@ -194,6 +198,15 @@ warning_severity (warnings flags)
     }
 }
 
     }
 }
 
+bool
+warning_is_unset (warnings flags)
+{
+  size_t b;
+  for (b = 0; b < warnings_size; ++b)
+    if (flags & 1 << b && warnings_flag[b] != severity_unset)
+      return false;
+  return true;
+}
 
 /** Display a "[-Wyacc]" like message on \a f.  */
 
 
 /** Display a "[-Wyacc]" like message on \a f.  */
 
@@ -354,3 +367,13 @@ deprecated_directive (location const *loc, char const *old, char const *upd)
               _("deprecated directive: %s, use %s"),
               quote (old), quote_n (1, upd));
 }
               _("deprecated directive: %s, use %s"),
               quote (old), quote_n (1, upd));
 }
+
+void
+duplicate_directive (char const *directive,
+                     location first, location second)
+{
+  unsigned i = 0;
+  complain (&second, complaint, _("only one %s allowed per rule"), directive);
+  i += SUB_INDENT;
+  complain_indent (&first, complaint, &i, _("previous declaration"));
+}