[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/4] undefined but unused is a warning
From: |
Akim Demaille |
Subject: |
[PATCH 1/4] undefined but unused is a warning |
Date: |
Tue, 4 Sep 2012 13:58:13 +0200 |
* src/symtab.c (symbol_check_defined): Undeclared symbols are only
a warning.
* tests/input.at (Undeclared symbols used for a printer or destructor):
Rename as...
(Undefined symbols): this, and check this case.
* NEWS: Doc it.
---
NEWS | 9 ++++-----
src/symtab.c | 26 ++++++--------------------
tests/input.at | 11 ++++++-----
3 files changed, 16 insertions(+), 30 deletions(-)
diff --git a/NEWS b/NEWS
index 8f52f80..0368c0e 100644
--- a/NEWS
+++ b/NEWS
@@ -36,18 +36,17 @@ GNU Bison NEWS
3.28-34: warning: type <type3> is used, but is not associated to any symbol
4.28-34: warning: type <type4> is used, but is not associated to any symbol
-*** Undeclared symbols
+*** Undefined but unused symbols
- Bison used to raise an error for %printer and %destructor directives for
- undefined symbols.
+ Bison used to raise an error for undefined symbols that are not used in
+ the grammar. This is now only a warning.
%printer {} symbol1
%destructor {} symbol2
+ %type <type> symbol3
%%
exp: "a";
- This is now only a warning.
-
*** Useless destructors or printers
Bison now warns about useless destructors or printers. In the following
diff --git a/src/symtab.c b/src/symtab.c
index b1b2e98..21c6125 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -383,26 +383,12 @@ symbol_check_defined (symbol *sym)
{
if (sym->class == unknown_sym)
{
- switch (sym->status)
- {
- case used:
- complain_at (sym->location, Wother,
- _("symbol %s is used, but is not defined as a token"
- " and has no rules"),
- sym->tag);
- break;
- case undeclared:
- case needed:
- complain_at (sym->location, complaint,
- _("symbol %s is used, but is not defined as a token"
- " and has no rules"),
- sym->tag);
- break;
- case declared:
- /* If declared, then sym->class != unknown_sym. */
- assert (0);
- }
-
+ assert (sym->status != declared);
+ complain_at (sym->location,
+ sym->status == needed ? complaint : Wother,
+ _("symbol %s is used, but is not defined as a token"
+ " and has no rules"),
+ sym->tag);
sym->class = nterm_sym;
sym->number = nvars++;
}
diff --git a/tests/input.at b/tests/input.at
index 3d3cf98..1d0574f 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -271,16 +271,16 @@ input.y:5.10-24: previous declaration
AT_CLEANUP
-## ----------------------------------------------------- ##
-## Undeclared symbols used for a printer or destructor. ##
-## ----------------------------------------------------- ##
+## ------------------- ##
+## Undefined symbols. ##
+## ------------------- ##
-AT_SETUP([Undeclared symbols used for a printer or destructor])
+AT_SETUP([Undefined symbols])
AT_DATA([[input.y]],
[[%printer {} foo baz
%destructor {} bar
-
+%type <foo> qux
%%
exp: bar;
]])
@@ -289,6 +289,7 @@ AT_BISON_CHECK([input.y], [1], [],
[[input.y:2.16-18: symbol bar is used, but is not defined as a token and has
no rules
input.y:1.17-19: warning: symbol baz is used, but is not defined as a token
and has no rules [-Wother]
input.y:1.13-15: warning: symbol foo is used, but is not defined as a token
and has no rules [-Wother]
+input.y:3.13-15: warning: symbol qux is used, but is not defined as a token
and has no rules [-Wother]
]])
AT_CLEANUP
--
1.7.11.5