[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 06/12] diagnostics: %empty enables -Wempty-rule
From: |
Akim Demaille |
Subject: |
[PATCH 06/12] diagnostics: %empty enables -Wempty-rule |
Date: |
Sat, 16 Feb 2013 14:55:42 +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 | 9 +++++++++
src/complain.h | 3 +++
src/reader.c | 4 ++++
tests/actions.at | 19 +++++++++++++++++++
4 files changed, 35 insertions(+)
diff --git a/src/complain.c b/src/complain.c
index cdc8803..44e1b1e 100644
--- a/src/complain.c
+++ b/src/complain.c
@@ -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. */
diff --git a/src/complain.h b/src/complain.h
index 422c48f..a433184 100644
--- a/src/complain.h
+++ b/src/complain.h
@@ -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, ...)
diff --git a/src/reader.c b/src/reader.c
index 0422d20..c83fc52 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -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
diff --git a/tests/actions.at b/tests/actions.at
index eb98bda..8e4c171 100644
--- a/tests/actions.at
+++ b/tests/actions.at
@@ -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
## ------------------------ ##
--
1.8.1.3
- Re: [PATCH 00/12] {master} explicit empty right-hand side of a rule, (continued)
- [PATCH 10/12] style: no longer use backquotes in messages, Akim Demaille, 2013/02/18
- [PATCH 08/12] doc: introduce %empty and -Wempty-rule, Akim Demaille, 2013/02/18
- Re: [PATCH 08/12] doc: introduce %empty and -Wempty-rule, Akim Demaille, 2013/02/16
- [PATCH 07/12] report: use %empty to denote empty rules, Akim Demaille, 2013/02/18
- [PATCH 09/12] doc: use %empty instead of /* empty */, Akim Demaille, 2013/02/18
- [PATCH 11/12] style: no longer use backquotes, Akim Demaille, 2013/02/18
- [PATCH 06/12] diagnostics: %empty enables -Wempty-rule,
Akim Demaille <=
- [PATCH 05/12] -Wempty-rule: diagnose empty rules without %empty, Akim Demaille, 2013/02/18
- [PATCH 04/12] tests: use %empty, Akim Demaille, 2013/02/18
- [PATCH 12/12] style: no longer use backquotes, Akim Demaille, 2013/02/18
- [PATCH 03/12] regen, Akim Demaille, 2013/02/18
- Re: get -Wyacc out of -Wall (was: RFC: explicit empty right-hand side of a rule), Akim Demaille, 2013/02/27