mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 07:13:02 +00:00
diagnostics: %empty enables -Wempty-rule
* 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.
This commit is contained in:
@@ -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. */
|
/** Display a "[-Wyacc]" like message on \a f. */
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,9 @@ typedef enum
|
|||||||
Wall = ~complaint & ~fatal & ~silent
|
Wall = ~complaint & ~fatal & ~silent
|
||||||
} warnings;
|
} 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. */
|
/** Make a complaint, with maybe a location. */
|
||||||
void complain (location const *loc, warnings flags, char const *message, ...)
|
void complain (location const *loc, warnings flags, char const *message, ...)
|
||||||
|
|||||||
@@ -451,6 +451,10 @@ grammar_current_rule_prec_set (symbol *precsym, location loc)
|
|||||||
void
|
void
|
||||||
grammar_current_rule_empty_set (location loc)
|
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)
|
if (current_rule->percent_empty_loc.start.file)
|
||||||
complain (&loc, complaint, _("only one %s allowed per rule"), "%empty");
|
complain (&loc, complaint, _("only one %s allowed per rule"), "%empty");
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -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
|
AT_CLEANUP
|
||||||
|
|
||||||
## ------------------------ ##
|
## ------------------------ ##
|
||||||
|
|||||||
Reference in New Issue
Block a user