]> git.saurik.com Git - bison.git/commitdiff
diagnostics: %empty enables -Wempty-rule
authorAkim Demaille <akim@lrde.epita.fr>
Sat, 16 Feb 2013 08:23:48 +0000 (09:23 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Mon, 18 Feb 2013 09:01:28 +0000 (10:01 +0100)
* src/complain.h, src/complain.c (warning_is_unset): New.
* src/reader.c (grammar_current_rule_empty_set): If enabled -Wempty-rule,
if not disabled.
* tests/actions.at (Implicitly empty rule): Check this feature.
Also check that -Wno-empty-rule does disable this warning.

src/complain.c
src/complain.h
src/reader.c
tests/actions.at

index cdc8803034227ce2774353a4ba3bb5dac08b5c47..44e1b1ea94b96a0ec4a6d1e6d28f79303a452da7 100644 (file)
@@ -196,6 +196,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.  */
 
index 422c48f484dd95e971ea08115a6337e184acf509..a43318482cb137523258755b900c6eb3dbb23efb 100644 (file)
@@ -101,6 +101,9 @@ typedef enum
     Wall              = ~complaint & ~fatal & ~silent
   } warnings;
 
+/** Whether the warnings of \a flags are all unset.
+    (Never enabled, never disabled). */
+bool warning_is_unset (warnings flags);
 
 /** Make a complaint, with maybe a location.  */
 void complain (location const *loc, warnings flags, char const *message, ...)
index 0422d2046ed4b33a486ed1f2f813c6e3d1bc5286..c83fc52afd6e0f3c51d03e10fe9df9c6132bddbe 100644 (file)
@@ -451,6 +451,10 @@ grammar_current_rule_prec_set (symbol *precsym, location loc)
 void
 grammar_current_rule_empty_set (location loc)
 {
+  /* If %empty is used and -Wno-empty-rule is not, then enable
+     -Wempty-rule.  */
+  if (warning_is_unset (Wempty_rule))
+    warning_argmatch ("empty-rule", 0, 0);
   if (current_rule->percent_empty_loc.start.file)
     complain (&loc, complaint, _("only one %s allowed per rule"), "%empty");
   else
index 1f6630a9dfb9611d1e2356224285856cfd69373a..d91fc17f15765edeaae0a37a988a5f623e5092cb 100644 (file)
@@ -84,6 +84,25 @@ AT_BISON_CHECK([-fcaret -Wempty-rule 1.y], [0], [],
                  ^^
 ]])
 
+AT_DATA_GRAMMAR([[2.y]],
+[[%%
+exp: a b c;
+a: /* empty. */ {};
+b: %empty       {};
+c: /* empty. */ {};
+]])
+
+AT_BISON_CHECK([-fcaret 2.y], [0], [],
+[[2.y:11.17-18: warning: empty rule without %empty [-Wempty-rule]
+ a: /* empty. */ {};
+                 ^^
+2.y:13.17-18: warning: empty rule without %empty [-Wempty-rule]
+ c: /* empty. */ {};
+                 ^^
+]])
+
+AT_BISON_CHECK([-fcaret -Wno-empty-rule 2.y], [0])
+
 AT_CLEANUP
 
 ## ------------------------ ##