From 8b0b2955691f511eb91cc6eb0fec75601aea80ac Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 27 Jan 2019 06:38:27 +0100 Subject: [PATCH] yacc: issue warnings, not errors, for Bison extensions Reported by Kiyoshi Kanazawa. http://lists.gnu.org/archive/html/bug-bison/2019-01/msg00029.html * src/getargs.c (getargs): Let --yacc imply -Wyacc, not -Werror=yacc. * tests/input.at: Adjust. * doc/bison.tex (Bison Options): Document. --- NEWS | 4 ++++ doc/bison.texi | 28 ++++++++++++++-------------- src/getargs.c | 2 +- tests/input.at | 18 +++++++++--------- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/NEWS b/NEWS index 6172bad6..ae5b923a 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ GNU Bison NEWS * Noteworthy changes in release ?.? (????-??-??) [?] +** Changes + + The option -y/--yacc used to imply -Werror=yacc, which turns uses of Bison + extensions into errors. It now makes them simple warnings (-Wyacc). * Noteworthy changes in release 3.3 (2019-01-26) [stable] diff --git a/doc/bison.texi b/doc/bison.texi index 884a7bd8..279b73d2 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -10308,26 +10308,26 @@ See the documentation of @option{--feature=fixit} below for more details. @item -y @itemx --yacc -Act more like the traditional Yacc command. This can cause different -diagnostics to be generated, and may change behavior in other minor -ways. Most importantly, imitate Yacc's output file name conventions, -so that the parser implementation file is called @file{y.tab.c}, and -the other outputs are called @file{y.output} and @file{y.tab.h}. -Also, if generating a deterministic parser in C, generate -@code{#define} statements in addition to an @code{enum} to associate -token numbers with token names. Thus, the following shell script can -substitute for Yacc, and the Bison distribution contains such a script -for compatibility with POSIX: +Act more like the traditional @command{yacc} command. This can cause +different diagnostics to be generated (it implies @option{-Wyacc}), and may +change behavior in other minor ways. Most importantly, imitate Yacc's +output file name conventions, so that the parser implementation file is +called @file{y.tab.c}, and the other outputs are called @file{y.output} and +@file{y.tab.h}. Also, if generating a deterministic parser in C, generate +@code{#define} statements in addition to an @code{enum} to associate token +numbers with token names. Thus, the following shell script can substitute +for Yacc, and the Bison distribution contains such a script for +compatibility with POSIX: @example #! /bin/sh bison -y "$@@" @end example -The @option{-y}/@option{--yacc} option is intended for use with -traditional Yacc grammars. If your grammar uses a Bison extension -like @samp{%glr-parser}, Bison might not be Yacc-compatible even if -this option is specified. +The @option{-y}/@option{--yacc} option is intended for use with traditional +Yacc grammars. If your grammar uses Bison extensions like +@samp{%glr-parser}, Bison might not be Yacc-compatible even if this option +is specified. @item -W [@var{category}] @itemx --warnings[=@var{category}] diff --git a/src/getargs.c b/src/getargs.c index 95572681..417e163c 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -708,7 +708,7 @@ getargs (int argc, char *argv[]) break; case 'y': - warning_argmatch ("error=yacc", 0, 6); + warning_argmatch ("yacc", 0, 0); yacc_loc = command_line_location (); break; diff --git a/tests/input.at b/tests/input.at index 8853af51..7494e46a 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1402,15 +1402,15 @@ without_period: "WITHOUT.PERIOD"; AT_BISON_OPTION_POPDEFS # POSIX Yacc accept periods, but not dashes. -AT_BISON_CHECK([--yacc input.y], [1], [], -[[input.y:1.1-5: error: POSIX Yacc does not support %code [-Werror=yacc] -input.y:9.8-16: error: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Werror=yacc] -input.y:10.21-34: error: POSIX Yacc does not support string literals [-Werror=yacc] -input.y:12.23-38: error: POSIX Yacc does not support string literals [-Werror=yacc] -input.y:13.1-5: error: POSIX Yacc does not support %code [-Werror=yacc] -input.y:20.8-16: error: POSIX Yacc forbids dashes in symbol names: with-dash [-Werror=yacc] -input.y:22.15-28: error: POSIX Yacc does not support string literals [-Werror=yacc] -input.y:24.17-32: error: POSIX Yacc does not support string literals [-Werror=yacc] +AT_BISON_CHECK([--yacc input.y], [], [], +[[input.y:1.1-5: warning: POSIX Yacc does not support %code [-Wyacc] +input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc] +input.y:10.21-34: warning: POSIX Yacc does not support string literals [-Wyacc] +input.y:12.23-38: warning: POSIX Yacc does not support string literals [-Wyacc] +input.y:13.1-5: warning: POSIX Yacc does not support %code [-Wyacc] +input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc] +input.y:22.15-28: warning: POSIX Yacc does not support string literals [-Wyacc] +input.y:24.17-32: warning: POSIX Yacc does not support string literals [-Wyacc] ]]) # Dashes are fine for GNU Bison.