mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 17:23:02 +00:00
Warn about unset midrule $$ if the corresponding $n is used.
* src/reader.c (symbol_should_be_used): Check midrule parent rule for $n usage. (packgram): Before invoking grammar_rule_check on any rule, make sure all actions have already been scanned in order to set `used' flags. Otherwise, checking that a midrule's $$ is set will not always work properly because the midrule check must forward-reference the midrule's parent rule. * tests/input.at (AT_CHECK_UNUSED_VALUES): Extend to check the new warning.
This commit is contained in:
13
ChangeLog
13
ChangeLog
@@ -1,3 +1,16 @@
|
|||||||
|
2006-10-20 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
|
Warn about unset midrule $$ if the corresponding $n is used.
|
||||||
|
* src/reader.c (symbol_should_be_used): Check midrule parent rule for
|
||||||
|
$n usage.
|
||||||
|
(packgram): Before invoking grammar_rule_check on any rule, make sure
|
||||||
|
all actions have already been scanned in order to set `used' flags.
|
||||||
|
Otherwise, checking that a midrule's $$ is set will not always work
|
||||||
|
properly because the midrule check must forward-reference the midrule's
|
||||||
|
parent rule.
|
||||||
|
* tests/input.at (AT_CHECK_UNUSED_VALUES): Extend to check the new
|
||||||
|
warning.
|
||||||
|
|
||||||
2006-10-20 Joel E. Denny <jdenny@ces.clemson.edu>
|
2006-10-20 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||||
|
|
||||||
More improvements to the documentation of the prologue alternatives:
|
More improvements to the documentation of the prologue alternatives:
|
||||||
|
|||||||
26
src/reader.c
26
src/reader.c
@@ -252,7 +252,10 @@ static bool
|
|||||||
symbol_should_be_used (symbol_list const *s)
|
symbol_should_be_used (symbol_list const *s)
|
||||||
{
|
{
|
||||||
return (symbol_destructor_get (s->content.sym)
|
return (symbol_destructor_get (s->content.sym)
|
||||||
|| (s->midrule && s->midrule->used));
|
|| (s->midrule && s->midrule->used)
|
||||||
|
|| (s->midrule_parent_rule
|
||||||
|
&& symbol_list_n_get (s->midrule_parent_rule,
|
||||||
|
s->midrule_parent_rhs_index)->used));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------.
|
/*----------------------------------------------------------------.
|
||||||
@@ -456,6 +459,20 @@ packgram (void)
|
|||||||
|
|
||||||
rules = xnmalloc (nrules, sizeof *rules);
|
rules = xnmalloc (nrules, sizeof *rules);
|
||||||
|
|
||||||
|
/* Before invoking grammar_rule_check on any rule, make sure
|
||||||
|
all actions have already been scanned in order to set `used' flags.
|
||||||
|
Otherwise, checking that a midrule's $$ is set will not always work
|
||||||
|
properly because the midrule check must forward-reference the midrule's
|
||||||
|
parent rule. */
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
if (p->action)
|
||||||
|
p->action = translate_rule_action (p);
|
||||||
|
if (p)
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = grammar;
|
||||||
while (p)
|
while (p)
|
||||||
{
|
{
|
||||||
int rule_length = 0;
|
int rule_length = 0;
|
||||||
@@ -472,14 +489,9 @@ packgram (void)
|
|||||||
rules[ruleno].precsym = NULL;
|
rules[ruleno].precsym = NULL;
|
||||||
rules[ruleno].location = p->location;
|
rules[ruleno].location = p->location;
|
||||||
rules[ruleno].useful = true;
|
rules[ruleno].useful = true;
|
||||||
rules[ruleno].action = p->action ? translate_rule_action (p) : NULL;
|
rules[ruleno].action = p->action;
|
||||||
rules[ruleno].action_location = p->action_location;
|
rules[ruleno].action_location = p->action_location;
|
||||||
|
|
||||||
/* If this rule contains midrules, rest assured that
|
|
||||||
grammar_midrule_action inserted the midrules into grammar before this
|
|
||||||
rule. Thus, the midrule actions have already been scanned in order to
|
|
||||||
set `used' flags for this rule's rhs, so grammar_rule_check will work
|
|
||||||
properly. */
|
|
||||||
/* Don't check the generated rule 0. It has no action, so some rhs
|
/* Don't check the generated rule 0. It has no action, so some rhs
|
||||||
symbols may appear unused, but the parsing algorithm ensures that
|
symbols may appear unused, but the parsing algorithm ensures that
|
||||||
%destructor's are invoked appropriately. */
|
%destructor's are invoked appropriately. */
|
||||||
|
|||||||
@@ -103,8 +103,8 @@ start:
|
|||||||
|
|
||||||
a: INT | INT { } INT { } INT { };
|
a: INT | INT { } INT { } INT { };
|
||||||
b: INT | /* empty */;
|
b: INT | /* empty */;
|
||||||
c: INT | INT { $]1[ } INT { } INT { };
|
c: INT | INT { $]1[ } INT { $<integer>2 } INT { $<integer>4 };
|
||||||
d: INT | INT { } INT { $]1[ } INT { };
|
d: INT | INT { } INT { $]1[ } INT { $<integer>2 };
|
||||||
e: INT | INT { } INT { } INT { $]1[ };
|
e: INT | INT { } INT { } INT { $]1[ };
|
||||||
f: INT | INT { } INT { } INT { $]$[ = $]1[ + $]3[ + $]5[; };
|
f: INT | INT { } INT { } INT { $]$[ = $]1[ + $]3[ + $]5[; };
|
||||||
g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
|
g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
|
||||||
@@ -122,12 +122,15 @@ input.y:11.10-32: warning: unused value: $]1[
|
|||||||
input.y:11.10-32: warning: unused value: $]3[
|
input.y:11.10-32: warning: unused value: $]3[
|
||||||
input.y:11.10-32: warning: unused value: $]5[
|
input.y:11.10-32: warning: unused value: $]5[
|
||||||
input.y:12.9: warning: empty rule for typed nonterminal, and no action
|
input.y:12.9: warning: empty rule for typed nonterminal, and no action
|
||||||
input.y:13.10-35: warning: unset value: $]$[
|
input.y:13.14-19: warning: unset value: $$
|
||||||
input.y:13.10-35: warning: unused value: $]3[
|
input.y:13.25-39: warning: unset value: $$
|
||||||
input.y:13.10-35: warning: unused value: $]5[
|
input.y:13.10-59: warning: unset value: $]$[
|
||||||
input.y:14.10-35: warning: unset value: $]$[
|
input.y:13.10-59: warning: unused value: $]3[
|
||||||
input.y:14.10-35: warning: unused value: $]3[
|
input.y:13.10-59: warning: unused value: $]5[
|
||||||
input.y:14.10-35: warning: unused value: $]5[
|
input.y:14.14-16: warning: unset value: $$
|
||||||
|
input.y:14.10-47: warning: unset value: $]$[
|
||||||
|
input.y:14.10-47: warning: unused value: $]3[
|
||||||
|
input.y:14.10-47: warning: unused value: $]5[
|
||||||
input.y:15.10-36: warning: unset value: $]$[
|
input.y:15.10-36: warning: unset value: $]$[
|
||||||
input.y:15.10-36: warning: unused value: $]3[
|
input.y:15.10-36: warning: unused value: $]3[
|
||||||
input.y:15.10-36: warning: unused value: $]5[
|
input.y:15.10-36: warning: unused value: $]5[
|
||||||
|
|||||||
Reference in New Issue
Block a user