From 31557b9eadace23bfd6ee3441f06fbf7dfbc4a32 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 15 Aug 2012 09:44:34 +0200 Subject: [PATCH] undefined but unused is a warning * 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 8f52f80c..0368c0e1 100644 --- a/NEWS +++ b/NEWS @@ -36,18 +36,17 @@ GNU Bison NEWS 3.28-34: warning: type is used, but is not associated to any symbol 4.28-34: warning: type 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 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 b1b2e98f..21c61255 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 3d3cf98e..1d0574f5 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 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 -- 2.45.2