]> git.saurik.com Git - bison.git/commitdiff
undefined but unused is a warning
authorAkim Demaille <akim@lrde.epita.fr>
Wed, 15 Aug 2012 07:44:34 +0000 (09:44 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Mon, 3 Sep 2012 14:23:15 +0000 (16:23 +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
src/symtab.c
tests/input.at

diff --git a/NEWS b/NEWS
index 8f52f80c6fabc3b263de2bfe6532c2b89d3b1ff6..0368c0e1930410580a2385dab89594a46fbec2ee 100644 (file)
--- 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
index b1b2e98f2ce70aad6e1da82c1e6c73c6e861c3ca..21c61255b9c39f8f033e9d34004b879d6a5d1675 100644 (file)
@@ -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++;
     }
index 3d3cf98e07d0bd33656bea577271268dd112d9c9..1d0574f5c59de11723a7dfc4a0f861a2c70cc5f0 100644 (file)
@@ -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