* src/reader.c (symbol_should_be_used): Renamed from symbol_typed_p.

All used changed.  Check whether the symbol has a destructor,
not whether it is typed.
* tests/input.at (AT_CHECK_UNUSED_VALUES): Add a destructor, so
that the values are still reported as unused.  All line numbers
adjusted.
This commit is contained in:
Paul Eggert
2006-01-27 22:51:00 +00:00
parent bf8b3d9821
commit d40ba6c272
3 changed files with 48 additions and 39 deletions

View File

@@ -1,3 +1,12 @@
2006-01-27 Paul Eggert <eggert@cs.ucla.edu>
* src/reader.c (symbol_should_be_used): Renamed from symbol_typed_p.
All used changed. Check whether the symbol has a destructor,
not whether it is typed.
* tests/input.at (AT_CHECK_UNUSED_VALUES): Add a destructor, so
that the values are still reported as unused. All line numbers
adjusted.
2006-01-23 Paul Eggert <eggert@cs.ucla.edu> 2006-01-23 Paul Eggert <eggert@cs.ucla.edu>
Work around a bug in bro 0.8, which underparenthesizes its Work around a bug in bro 0.8, which underparenthesizes its

View File

@@ -212,17 +212,16 @@ grammar_current_rule_begin (symbol *lhs, location loc)
} }
/*-----------------------------------------------------------------. /*----------------------------------------------------------------------.
| A symbol is typed if it has a declared %type, or if it is a | | A symbol should be used if it has a destructor, or if it is a |
| mid-rule symbol (i.e., the generated LHS replacing a mid-rule | | mid-rule symbol (i.e., the generated LHS replacing a mid-rule |
| action) that was assigned to, as in `exp: { $$ = 1; } { $$ = $1; | | action) that was assigned to, as in "exp: { $$ = 1; } { $$ = $1; }". |
| }'. | `----------------------------------------------------------------------*/
`-----------------------------------------------------------------*/
static bool static bool
symbol_typed_p (const symbol_list *s) symbol_should_be_used (symbol_list const *s)
{ {
return (s->sym->type_name return (s->sym->destructor
|| (s->midrule && s->midrule->used)); || (s->midrule && s->midrule->used));
} }
@@ -261,13 +260,13 @@ grammar_rule_check (const symbol_list *r)
_("empty rule for typed nonterminal, and no action")); _("empty rule for typed nonterminal, and no action"));
} }
/* Check that typed symbol values are used. */ /* Check that symbol values that should be used are in fact used. */
{ {
symbol_list const *l = r; symbol_list const *l = r;
int n = 0; int n = 0;
for (; l && l->sym; l = l->next, ++n) for (; l && l->sym; l = l->next, ++n)
if (! (l->used if (! (l->used
|| !symbol_typed_p (l) || !symbol_should_be_used (l)
/* The default action, $$ = $1, `uses' both. */ /* The default action, $$ = $1, `uses' both. */
|| (!r->action && (n == 0 || n == 1)))) || (!r->action && (n == 0 || n == 1))))
{ {

View File

@@ -92,6 +92,7 @@ m4_define([AT_CHECK_UNUSED_VALUES],
AT_DATA([input.y], AT_DATA([input.y],
[[%token <integer> INT [[%token <integer> INT
%type <integer> exp %type <integer> exp
%destructor { destroy ($$); } INT exp
%% %%
exp: exp:
$1 $1
@@ -106,56 +107,56 @@ AT_CLEANUP
]) ])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { }], AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { }],
[input.y:5.3-25: warning: unset value: $$ [input.y:6.3-25: warning: unset value: $$
input.y:5.3-25: warning: unused value: $1 input.y:6.3-25: warning: unused value: $1
input.y:5.3-25: warning: unused value: $3 input.y:6.3-25: warning: unused value: $3
input.y:5.3-25: warning: unused value: $5 input.y:6.3-25: warning: unused value: $5
]) ])
AT_CHECK_UNUSED_VALUES([INT { $1 } INT { } INT { }], AT_CHECK_UNUSED_VALUES([INT { $1 } INT { } INT { }],
[input.y:5.3-28: warning: unset value: $$ [input.y:6.3-28: warning: unset value: $$
input.y:5.3-28: warning: unused value: $3 input.y:6.3-28: warning: unused value: $3
input.y:5.3-28: warning: unused value: $5 input.y:6.3-28: warning: unused value: $5
]) ])
AT_CHECK_UNUSED_VALUES([INT { } INT { $1 } INT { }], AT_CHECK_UNUSED_VALUES([INT { } INT { $1 } INT { }],
[input.y:5.3-28: warning: unset value: $$ [input.y:6.3-28: warning: unset value: $$
input.y:5.3-28: warning: unused value: $3 input.y:6.3-28: warning: unused value: $3
input.y:5.3-28: warning: unused value: $5 input.y:6.3-28: warning: unused value: $5
]) ])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $1 }], AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $1 }],
[input.y:5.3-29: warning: unset value: $$ [input.y:6.3-29: warning: unset value: $$
input.y:5.3-29: warning: unused value: $3 input.y:6.3-29: warning: unused value: $3
input.y:5.3-29: warning: unused value: $5 input.y:6.3-29: warning: unused value: $5
]) ])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $$ = $1 + $3 + $5; }]) AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $$ = $1 + $3 + $5; }])
# Checking mid-rule values. # Checking mid-rule values.
AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ } INT { }], AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ } INT { }],
[input.y:5.3-31: warning: unset value: $$ [input.y:6.3-31: warning: unset value: $$
input.y:5.3-31: warning: unused value: $1 input.y:6.3-31: warning: unused value: $1
input.y:5.3-31: warning: unused value: $2 input.y:6.3-31: warning: unused value: $2
input.y:5.3-31: warning: unused value: $3 input.y:6.3-31: warning: unused value: $3
input.y:5.3-31: warning: unused value: $4 input.y:6.3-31: warning: unused value: $4
input.y:5.3-31: warning: unused value: $5 input.y:6.3-31: warning: unused value: $5
]) ])
AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ = $2 } INT { }], AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ = $2 } INT { }],
[input.y:5.3-36: warning: unset value: $$ [input.y:6.3-36: warning: unset value: $$
input.y:5.3-36: warning: unused value: $1 input.y:6.3-36: warning: unused value: $1
input.y:5.3-36: warning: unused value: $3 input.y:6.3-36: warning: unused value: $3
input.y:5.3-36: warning: unused value: $4 input.y:6.3-36: warning: unused value: $4
input.y:5.3-36: warning: unused value: $5 input.y:6.3-36: warning: unused value: $5
]) ])
# AT_CHECK_UNUSED_VALUES([INT { $$ } { $$ = $2 } { }], # AT_CHECK_UNUSED_VALUES([INT { $$ } { $$ = $2 } { }],
# [input.y:5.3-36: warning: unset value: $$ # [input.y:6.3-36: warning: unset value: $$
# input.y:5.3-36: warning: unused value: $1 # input.y:6.3-36: warning: unused value: $1
# input.y:5.3-36: warning: unused value: $3 # input.y:6.3-36: warning: unused value: $3
# input.y:5.3-36: warning: unused value: $4 # input.y:6.3-36: warning: unused value: $4
# input.y:5.3-36: warning: unused value: $5 # input.y:6.3-36: warning: unused value: $5
# ]) # ])
AT_CHECK_UNUSED_VALUES([INT { $$ = $1 } INT { $$ = $2 + $3 } INT { $$ = $4 + $5 }]) AT_CHECK_UNUSED_VALUES([INT { $$ = $1 } INT { $$ = $2 + $3 } INT { $$ = $4 + $5 }])