}
-/*-----------------------------------------------------------------.
-| A symbol is typed if it has a declared %type, or if it is a |
-| mid-rule symbol (i.e., the generated LHS replacing a mid-rule |
-| action) that was assigned to, as in `exp: { $$ = 1; } { $$ = $1; |
-| }'. |
-`-----------------------------------------------------------------*/
+/*----------------------------------------------------------------------.
+| 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 |
+| action) that was assigned to, as in "exp: { $$ = 1; } { $$ = $1; }". |
+`----------------------------------------------------------------------*/
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));
}
_("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;
int n = 0;
for (; l && l->sym; l = l->next, ++n)
if (! (l->used
- || !symbol_typed_p (l)
+ || !symbol_should_be_used (l)
/* The default action, $$ = $1, `uses' both. */
|| (!r->action && (n == 0 || n == 1))))
{
AT_DATA([input.y],
[[%token <integer> INT
%type <integer> exp
+%destructor { destroy ($$); } INT exp
%%
exp:
$1
])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { }],
-[input.y:5.3-25: warning: unset value: $$
-input.y:5.3-25: warning: unused value: $1
-input.y:5.3-25: warning: unused value: $3
-input.y:5.3-25: warning: unused value: $5
+[input.y:6.3-25: warning: unset value: $$
+input.y:6.3-25: warning: unused value: $1
+input.y:6.3-25: warning: unused value: $3
+input.y:6.3-25: warning: unused value: $5
])
AT_CHECK_UNUSED_VALUES([INT { $1 } INT { } INT { }],
-[input.y:5.3-28: warning: unset value: $$
-input.y:5.3-28: warning: unused value: $3
-input.y:5.3-28: warning: unused value: $5
+[input.y:6.3-28: warning: unset value: $$
+input.y:6.3-28: warning: unused value: $3
+input.y:6.3-28: warning: unused value: $5
])
AT_CHECK_UNUSED_VALUES([INT { } INT { $1 } INT { }],
-[input.y:5.3-28: warning: unset value: $$
-input.y:5.3-28: warning: unused value: $3
-input.y:5.3-28: warning: unused value: $5
+[input.y:6.3-28: warning: unset value: $$
+input.y:6.3-28: warning: unused value: $3
+input.y:6.3-28: warning: unused value: $5
])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $1 }],
-[input.y:5.3-29: warning: unset value: $$
-input.y:5.3-29: warning: unused value: $3
-input.y:5.3-29: warning: unused value: $5
+[input.y:6.3-29: warning: unset value: $$
+input.y:6.3-29: warning: unused value: $3
+input.y:6.3-29: warning: unused value: $5
])
AT_CHECK_UNUSED_VALUES([INT { } INT { } INT { $$ = $1 + $3 + $5; }])
# Checking mid-rule values.
AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ } INT { }],
-[input.y:5.3-31: warning: unset value: $$
-input.y:5.3-31: warning: unused value: $1
-input.y:5.3-31: warning: unused value: $2
-input.y:5.3-31: warning: unused value: $3
-input.y:5.3-31: warning: unused value: $4
-input.y:5.3-31: warning: unused value: $5
+[input.y:6.3-31: warning: unset value: $$
+input.y:6.3-31: warning: unused value: $1
+input.y:6.3-31: warning: unused value: $2
+input.y:6.3-31: warning: unused value: $3
+input.y:6.3-31: warning: unused value: $4
+input.y:6.3-31: warning: unused value: $5
])
AT_CHECK_UNUSED_VALUES([INT { $$ } INT { $$ = $2 } INT { }],
-[input.y:5.3-36: warning: unset value: $$
-input.y:5.3-36: warning: unused value: $1
-input.y:5.3-36: warning: unused value: $3
-input.y:5.3-36: warning: unused value: $4
-input.y:5.3-36: warning: unused value: $5
+[input.y:6.3-36: warning: unset value: $$
+input.y:6.3-36: warning: unused value: $1
+input.y:6.3-36: warning: unused value: $3
+input.y:6.3-36: warning: unused value: $4
+input.y:6.3-36: warning: unused value: $5
])
# AT_CHECK_UNUSED_VALUES([INT { $$ } { $$ = $2 } { }],
-# [input.y:5.3-36: warning: unset value: $$
-# input.y:5.3-36: warning: unused value: $1
-# input.y:5.3-36: warning: unused value: $3
-# input.y:5.3-36: warning: unused value: $4
-# input.y:5.3-36: warning: unused value: $5
+# [input.y:6.3-36: warning: unset value: $$
+# input.y:6.3-36: warning: unused value: $1
+# input.y:6.3-36: warning: unused value: $3
+# input.y:6.3-36: warning: unused value: $4
+# input.y:6.3-36: warning: unused value: $5
# ])
AT_CHECK_UNUSED_VALUES([INT { $$ = $1 } INT { $$ = $2 + $3 } INT { $$ = $4 + $5 }])