From 36cdaaac539f05decd282d6b36447a2804ff0374 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 28 Sep 2012 15:04:57 +0200 Subject: [PATCH 01/22] gnulib: update --- gnulib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnulib b/gnulib index 4430dd02..dcf27bef 160000 --- a/gnulib +++ b/gnulib @@ -1 +1 @@ -Subproject commit 4430dd023d6c2b7b63a87fa62dcc2360c5a34a12 +Subproject commit dcf27bef48c9800d5a2be8349226f73f1b8ff2e5 From 3746fc33c47a8c76232a49d7116a3fba8bfe44c5 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 27 Sep 2012 09:42:57 +0200 Subject: [PATCH 02/22] minor changes. * NEWS: Word changes. * doc/bison.texi: Spell check. Fix minor issues. * tests/headers.at: Comment and formatting changes. --- doc/bison.texi | 13 +++++++------ tests/headers.at | 8 +++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/doc/bison.texi b/doc/bison.texi index ad605054..b8a1aa6d 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -5076,7 +5076,7 @@ default location or at the location specified by @var{qualifier}. @deffn {Directive} %debug In the parser implementation file, define the macro @code{YYDEBUG} (or -@code{@var{prefix}DEBUG} with @samp{%define api.prefix @var{prefix}}), see +@code{@var{prefix}DEBUG} with @samp{%define api.prefix @var{prefix}}, see @ref{Multiple Parsers, ,Multiple Parsers in the Same Program}) to 1 if it is not already defined, so that the debugging facilities are compiled. @xref{Tracing, ,Tracing Your Parser}. @@ -8502,8 +8502,8 @@ Prologue}). If the @code{%define} variable @code{api.prefix} is used (@pxref{Multiple Parsers, ,Multiple Parsers in the Same Program}), for instance @samp{%define api.prefix x}, then if @code{CDEBUG} is defined, its value controls the -tracing feature (enabled iff nonzero); otherwise tracing is enabled iff -@code{YYDEBUG} is nonzero. +tracing feature (enabled if and only if nonzero); otherwise tracing is +enabled if and only if @code{YYDEBUG} is nonzero. @item the option @option{-t} (POSIX Yacc compliant) @itemx the option @option{--debug} (Bison extension) @@ -11761,10 +11761,11 @@ London, Department of Computer Science, TR-00-12 (December 2000). @c LocalWords: toString deftypeivar deftypeivarx deftypeop YYParser strictfp @c LocalWords: superclasses boolean getErrorVerbose setErrorVerbose deftypecv @c LocalWords: getDebugStream setDebugStream getDebugLevel setDebugLevel url -@c LocalWords: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos +@c LocalWords: bisonVersion deftypecvx bisonSkeleton getStartPos getEndPos uint @c LocalWords: getLVal defvar deftypefn deftypefnx gotos msgfmt Corbett LALR's -@c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy -@c LocalWords: Scannerless ispell american +@c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy ints +@c LocalWords: Scannerless ispell american ChangeLog smallexample CSTYPE CLTYPE +@c LocalWords: clval CDEBUG cdebug deftypeopx yyterminate @c Local Variables: @c ispell-dictionary: "american" diff --git a/tests/headers.at b/tests/headers.at index cac7fe5f..aea0bc9b 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -126,8 +126,8 @@ AT_SETUP([Several parsers]) # AT_TEST([PREFIX], [DIRECTIVES]) # ------------------------------- -# Generate and compile to *.o. Make sure there is no YY* nor yy* in -# the header (but YYDEBUG and YYPARSE_PARAM). +# Generate and compile to *.o. Make sure there is no (allowed) YY* +# nor yy* identifiers in the header. m4_pushdef([AT_TEST], [AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2]) AT_DATA_GRAMMAR([$1.AT_SKEL_CC_IF([yy], [y])], @@ -161,6 +161,8 @@ exp: ]]) AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c $1.y])]) + +# Check there is no 'yy' left. # C++ output relies on namespaces and still uses yy a lot. AT_SKEL_CC_IF([], [AT_CHECK([$EGREP yy $1.h], [1])]) @@ -173,8 +175,8 @@ AT_CHECK([[sed -ne 's,/\*[^*]*\*/,,g;s,//.*,,' \ -e '/YY/p' ]$1.AT_SKEL_CC_IF([hh], [h])[ | $EGREP -wv 'YY(PARSE_PARAM|PUSH_MORE(_DEFINED)?)|(defined|if) YYDEBUG']], [1]) -AT_LANG_COMPILE([$1.o]) +AT_LANG_COMPILE([$1.o]) AT_CHECK([[echo "$1" >>expout]]) AT_BISON_OPTION_POPDEFS From 6192d2c6de859990f8e90c128de9733c1315db7a Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 27 Sep 2012 09:43:49 +0200 Subject: [PATCH 03/22] headers: move CPP guards into YY_*_INCLUDED to avoid collisions See . * data/c.m4 (b4_cpp_guard): Prepend YY_ and append _INCLUDED. * tests/headers.at: Adjust. * NEWS, doc/bison.texi: Document. --- NEWS | 11 +++++++++++ data/c.m4 | 2 +- doc/bison.texi | 17 +++++++++++++++++ tests/headers.at | 7 ++++--- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 75a11bf0..090253d4 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,17 @@ GNU Bison NEWS Incorrect definitions of YY_, issued by yacc.c when no parser header is generated, are removed. +** Header guards (yacc.c, glr.c, glr.cc) + + In order to avoid collisions, the header guards are now + YY___INCLUDED, instead of merely _. + For instance the header generated from + + %define api.prefix "calc" + %defines "lib/parse.h" + + will use YY_CALC_LIB_PARSE_H_INCLUDED as guard. + * Noteworthy changes in release 2.6.2 (2012-08-03) [stable] ** Bug fixes diff --git a/data/c.m4 b/data/c.m4 index ccb4969e..fd2203eb 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -30,7 +30,7 @@ m4_define([b4_tocpp], # ------------------ # A valid C macro name to use as a CPP header guard for FILE. m4_define([b4_cpp_guard], -[b4_tocpp(m4_defn([b4_prefix])/[$1])]) +[[YY_]b4_tocpp(m4_defn([b4_prefix])/[$1])[_INCLUDED]]) # b4_cpp_guard_open(FILE) diff --git a/doc/bison.texi b/doc/bison.texi index b8a1aa6d..69836112 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -5124,6 +5124,23 @@ Values, ,Semantic Values of Tokens}. If you have declared @code{%code requires} or @code{%code provides}, the output header also contains their code. @xref{%code Summary}. + +@cindex Header guard +The generated header is protected against multiple inclusions with a C +preprocessor guard: @samp{YY_@var{PREFIX}_@var{FILE}_INCLUDED}, where +@var{PREFIX} and @var{FILE} are the prefix (@pxref{Multiple Parsers, +,Multiple Parsers in the Same Program}) and generated file name turned +uppercase, with each series of non alphanumerical characters converted to a +single underscore. + +For instance with @samp{%define api.prefix "calc"} and @samp{%defines +"lib/parse.h"}, the header will be guarded as follows. +@example +#ifndef YY_CALC_LIB_PARSE_H_INCLUDED +# define YY_CALC_LIB_PARSE_H_INCLUDED +... +#endif /* ! YY_CALC_LIB_PARSE_H_INCLUDED */ +@end example @end deffn @deffn {Directive} %defines @var{defines-file} diff --git a/tests/headers.at b/tests/headers.at index aea0bc9b..0524340e 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -167,13 +167,14 @@ AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c $1.y])]) AT_SKEL_CC_IF([], [AT_CHECK([$EGREP yy $1.h], [1])]) -# Ignore comments. Ignore YYPARSE_PARAM (obsolete) and -# YYPUSH_MORE(_DEFINED)? (whose definition is constant). +# Check there is not 'YY' left. +# Ignore comments, YYPARSE_PARAM (obsolete), YYPUSH_MORE(_DEFINED)? +# (constant definition), YY_\w+_INCLUDED (header guards). # # YYDEBUG (not renamed) can be read, but not changed. AT_CHECK([[sed -ne 's,/\*[^*]*\*/,,g;s,//.*,,' \ -e '/YY/p' ]$1.AT_SKEL_CC_IF([hh], [h])[ | - $EGREP -wv 'YY(PARSE_PARAM|PUSH_MORE(_DEFINED)?)|(defined|if) YYDEBUG']], + $EGREP -wv 'YY(PARSE_PARAM|PUSH_MORE(_DEFINED)?|_[0-9A-Z_]+_INCLUDED)|(defined|if) YYDEBUG']], [1]) AT_LANG_COMPILE([$1.o]) From c473e022d9865ba35101de1b9045458f9be45057 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 3 Oct 2012 08:43:10 +0200 Subject: [PATCH 04/22] doc: add missing documentation for --report * doc/bison.texi (Bison Options): Document --report's "solved", "all", and "none". --- doc/bison.texi | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/doc/bison.texi b/doc/bison.texi index 69836112..ba18d9a9 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -9072,13 +9072,23 @@ separated list of @var{things} among: Description of the grammar, conflicts (resolved and unresolved), and parser's automaton. +@item itemset +Implies @code{state} and augments the description of the automaton with +the full set of items for each state, instead of its core only. + @item lookahead Implies @code{state} and augments the description of the automaton with each rule's lookahead set. -@item itemset -Implies @code{state} and augments the description of the automaton with -the full set of items for each state, instead of its core only. +@item solved +Implies @code{state}. Explain how conflicts were solved thanks to +precedence and associativity directives. + +@item all +Enable all the items. + +@item none +Do not generate the report. @end table @item --report-file=@var{file} From ddbd0c40dc1c2399d2a0c961d8ecf07c8a698024 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 3 Oct 2012 09:17:58 +0200 Subject: [PATCH 05/22] tests: check that headers are self contained Reported by Alexandre Duret-Lutz. * tests/headers.at (Several parsers): here. --- THANKS | 2 +- tests/headers.at | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/THANKS b/THANKS index 95acb1e2..170b0569 100644 --- a/THANKS +++ b/THANKS @@ -5,7 +5,7 @@ Airy Andre Airy.Andre@edf.fr Akim Demaille akim@freefriends.org Albert Chin-A-Young china@thewrittenword.com Alexander Belopolsky alexb@rentec.com -Alexandre Duret-Lutz adl@src.lip6.fr +Alexandre Duret-Lutz adl@lrde.epita.fr Andreas Schwab schwab@suse.de Andrew Suffield asuffield@users.sourceforge.net Angelo Borsotti angelo.borsotti@gmail.com diff --git a/tests/headers.at b/tests/headers.at index 0524340e..91fdb950 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -127,7 +127,8 @@ AT_SETUP([Several parsers]) # AT_TEST([PREFIX], [DIRECTIVES]) # ------------------------------- # Generate and compile to *.o. Make sure there is no (allowed) YY* -# nor yy* identifiers in the header. +# nor yy* identifiers in the header. Check that headers are +# self-contained, and can be compiled by a C++ compiler. m4_pushdef([AT_TEST], [AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2]) AT_DATA_GRAMMAR([$1.AT_SKEL_CC_IF([yy], [y])], @@ -242,6 +243,18 @@ AT_TEST([x8], [%define api.pure %define api.push-pull both]) AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]]) AT_CHECK([./parser], [0], [[expout]]) +# Check that the headers are self-contained, and protected against +# multiple inclusions. While at it, check they are sane for C++. +for h in *.h *.hh +do + # No shell expansion with AT_DATA. + cat >$h.cc < Date: Wed, 3 Oct 2012 15:26:56 +0000 Subject: [PATCH 06/22] maint: fix an erroneous include This fixes test 130 (Several parsers). * data/location.cc: Include rather than since we really need << on strings for instance. * NEWS: Document this. Signed-off-by: Akim Demaille --- NEWS | 4 +++- data/location.cc | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 090253d4..90b5d9d8 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,8 @@ GNU Bison NEWS Incorrect definitions of YY_, issued by yacc.c when no parser header is generated, are removed. + All the generated headers are self-contained. + ** Header guards (yacc.c, glr.c, glr.cc) In order to avoid collisions, the header guards are now @@ -1882,7 +1884,7 @@ along with this program. If not, see . LocalWords: namespaces strerror const autoconfiguration Dconst Autoconf's FDL LocalWords: Automake TMPDIR LESSEQ ylwrap endif yydebug YYTOKEN YYLSP ival hh LocalWords: extern YYTOKENTYPE TOKENTYPE yytokentype tokentype STYPE lval pdf - LocalWords: lang yyoutput dvi html ps POSIX lvalp llocp + LocalWords: lang yyoutput dvi html ps POSIX lvalp llocp calc yyo fval Local Variables: mode: outline diff --git a/data/location.cc b/data/location.cc index b7383d65..0673f4c2 100644 --- a/data/location.cc +++ b/data/location.cc @@ -30,7 +30,7 @@ b4_copyright([Positions for Bison parsers in C++], ]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[ # include // std::max -# include +# include # include ]b4_null_define[ From 7aa15a002657765f171865c11e368782f6109f7d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 4 Oct 2012 09:07:42 +0200 Subject: [PATCH 07/22] lalr1.cc: fix test suite portability Reported by Rob Vermaas' Hydra build farm on x86_64-darwin 10.2.0 with G++ 4.6.3. * tests/headers.at (Several parsers): Include AT_DATA_SOURCE_PROLOGUE in the files to compile. * data/location.cc: Do not include twice string and iostream (once by position.hh, and then by location.hh). * README-hacking (Typical errors): Some hints for other maintainers. --- README-hacking | 13 +++++++++++++ THANKS | 1 + data/location.cc | 2 -- tests/headers.at | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README-hacking b/README-hacking index bb91ac06..50669568 100644 --- a/README-hacking +++ b/README-hacking @@ -168,6 +168,19 @@ decide whether to update. ** make check Use liberally. +** Typical errors +If the test suite shows failures such as the following one + + .../bison/lib/getopt.h:196:8: error: redefinition of 'struct option' + /usr/include/getopt.h:54:8: error: previous definition of 'struct option' + +it probably means that some file was compiled without +AT_DATA_SOURCE_PROLOGUE. This error is due to the fact that our -I pick up +gnulib's replacement headers, such as getopt.h, which will go if config.h +was not included first. + +See tests/local.at for details. + ** make maintainer-check-valgrind This target uses valgrind both to check bison, and the generated parsers. diff --git a/THANKS b/THANKS index 170b0569..b6a2b2d8 100644 --- a/THANKS +++ b/THANKS @@ -93,6 +93,7 @@ R Blake blakers@mac.com Raja R Harinath harinath@cs.umn.edu Ralf Wildenhues Ralf.Wildenhues@gmx.de Richard Stallman rms@gnu.org +Rob Vermaas rob.vermaas@gmail.com Robert Anisko anisko_r@epita.fr Satya Kiran Popuri satyakiran@gmail.com Sebastian Setzer sebastian.setzer.ext@siemens.com diff --git a/data/location.cc b/data/location.cc index 0673f4c2..92b6d096 100644 --- a/data/location.cc +++ b/data/location.cc @@ -159,8 +159,6 @@ b4_copyright([Locations for Bison parsers in C++], ]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[ -# include -# include # include "position.hh" ]b4_namespace_open[ diff --git a/tests/headers.at b/tests/headers.at index 91fdb950..8e70a7eb 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -249,6 +249,7 @@ for h in *.h *.hh do # No shell expansion with AT_DATA. cat >$h.cc < Date: Thu, 4 Oct 2012 11:45:09 +0200 Subject: [PATCH 08/22] maint: word changes * README-hacking (Typical errors): Improve wording. --- README-hacking | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-hacking b/README-hacking index 50669568..26391e98 100644 --- a/README-hacking +++ b/README-hacking @@ -175,9 +175,9 @@ If the test suite shows failures such as the following one /usr/include/getopt.h:54:8: error: previous definition of 'struct option' it probably means that some file was compiled without -AT_DATA_SOURCE_PROLOGUE. This error is due to the fact that our -I pick up -gnulib's replacement headers, such as getopt.h, which will go if config.h -was not included first. +AT_DATA_SOURCE_PROLOGUE. This error is due to the fact that our -I options +pick up gnulib's replacement headers, such as getopt.h, and this will go +wrong if config.h was not included first. See tests/local.at for details. From 9a50c55af79520cb103ea7941e84bd554de16a98 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 5 Oct 2012 08:54:15 +0200 Subject: [PATCH 09/22] tests: diff -u is not portable Reported by Didier Godefroy . * tests/existing.at (AT_LALR1_DIFF_CHECK): Skip if diff -u does not work. --- NEWS | 2 +- tests/existing.at | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 90b5d9d8..b5c89040 100644 --- a/NEWS +++ b/NEWS @@ -4,7 +4,7 @@ GNU Bison NEWS ** Bug fixes - Bugs in the test suite have been fixed. + Bugs and portability issues in the test suite have been fixed. Some errors in translations have been addressed, and --help now directs users to the appropriate place to report them. diff --git a/tests/existing.at b/tests/existing.at index 582f6b3d..149499d4 100644 --- a/tests/existing.at +++ b/tests/existing.at @@ -35,7 +35,10 @@ dnl time comes, just use sed to drop the line numbers. For now, as LR(1) dnl support is rapidly evolving, let's keep that information to be careful. dnl However, we don't do diffs for canonical LR(1) because the diff is huge. m4_pushdef([AT_LALR1_DIFF_CHECK], -[AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]]) +[dnl We need diff -u, which is not portable. +AT_CHECK([diff -u /dev/null /dev/null || exit 77], [0], [ignore]) + +AT_CHECK([[sed 's/^%define lr.type .*$//' input.y > input-lalr.y]]) AT_BISON_CHECK([[--report=all input-lalr.y]], [[0]], [ignore], [ignore]) AT_CHECK([[diff -u input-lalr.output input.output \ | sed -n '/^@@/,$p' | sed 's/^ $//']], From e272d9dc80291b22a3a80675e2cefafdd40a8581 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 5 Oct 2012 09:20:30 +0200 Subject: [PATCH 10/22] tests: fix sed portability issues Reported by Didier Godefroy, . * tests/calc.at (AT_CHECK_SPACES): Use Perl. --- tests/calc.at | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/calc.at b/tests/calc.at index 3aab8681..a1c11e5f 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -503,12 +503,15 @@ AT_CHECK([cat stderr], 0, [expout]) # Make sure we did not introduce bad spaces. Checked here because all # the skeletons are (or should be) exercized here. m4_define([AT_CHECK_SPACES], -[# No initial empty lines. -AT_CHECK([sed -ne '/./q;=;p;' $1]) -# No trailing spaces. -# FIXME: For 2.7: AT_CHECK([sed -ne '/[ ]$/{=;p;}' $1]) -# No final empty lines. -AT_CHECK([sed -ne '${/^$/{=;p;};}' $1]) +[AT_CHECK([perl -ne ' + chomp; + print "$.: {$_}\n" + if (# No starting/ending empty lines. + (eof || $. == 1) && /^\s*$/ + # No trailing space. FIXME: not ready for "maint". + # || /\s$/ + )' $1 +])dnl ]) From 82443642d255cc2fd61644cf3fef2c9622bed245 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 8 Apr 2012 08:58:43 +0200 Subject: [PATCH 11/22] build: look for Perl in configure. Bison uses "/usr/bin/perl" or "perl" in several places, and it does not appear to be a problem. But, at least to make it simpler to change PERL on the make command line, check for perl in configure. * configure.ac (PERL): New. * doc/Doxyfile.in, doc/Makefile.am, tests/bison.in: Use it. --- configure.ac | 4 ++++ doc/Doxyfile.in | 2 +- doc/Makefile.am | 2 +- tests/bison.in | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index b9d2ea69..4cc9ef91 100644 --- a/configure.ac +++ b/configure.ac @@ -123,6 +123,10 @@ AC_PROG_GNU_M4 AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.]) AC_DEFINE_UNQUOTED([M4_GNU_OPTION], ["$M4_GNU"], [Define to "-g" if GNU M4 supports -g, otherwise to "".]) +AC_PATH_PROG([PERL], [perl]) +if test -z "$PERL"; then + AC_MSG_ERROR([perl not found]) +fi AM_MISSING_PROG([HELP2MAN], [help2man]) AC_PATH_PROG([XSLTPROC], [xsltproc]) AC_SUBST([XSLTPROC]) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index b5557518..e36a1cee 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -940,7 +940,7 @@ EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). -PERL_PATH = /usr/bin/perl +PERL_PATH = @PERL@ #--------------------------------------------------------------------------- # Configuration options related to the dot tool diff --git a/doc/Makefile.am b/doc/Makefile.am index d87f00f0..f695e22d 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -30,7 +30,7 @@ $(srcdir)/cross-options.texi: $(top_srcdir)/src/getargs.c $(CROSS_OPTIONS_PL) $(AM_V_at)rm -f $@.tmp $(AM_V_at)cd $(top_builddir)/src && $(MAKE) $(AM_MAKEFLAGS) bison $(AM_V_at)$(top_builddir)/src/bison --help \ - | perl $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l >$@.tmp + | $(PERL) $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l >$@.tmp $(AM_V_at)diff -u $@~ $@.tmp || true $(AM_V_at)mv $@.tmp $@ MAINTAINERCLEANFILES = $(srcdir)/cross-options.texi diff --git a/tests/bison.in b/tests/bison.in index 4dfeb791..f21b2bcd 100644 --- a/tests/bison.in +++ b/tests/bison.in @@ -19,7 +19,7 @@ abs_top_srcdir='@abs_top_srcdir@' abs_top_builddir='@abs_top_builddir@' -: ${PERL=perl} +: ${PERL='@PERL@'} # Use the shipped files, not those installed. BISON_PKGDATADIR=$abs_top_srcdir/data From c955769a75197c3afddc9ea674439f3a49b82059 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 5 Oct 2012 09:24:59 +0200 Subject: [PATCH 12/22] tests: use $PERL instead of perl * tests/atlocal.in (PERL): New. Sort. * tests/calc.at, tests/input.at, tests/local.at, tests/regression.at, * tests/skeletons.at, tests/synclines.at, tests/torture.at: here. --- tests/atlocal.in | 20 +++++++++++--------- tests/calc.at | 2 +- tests/input.at | 8 ++++---- tests/local.at | 2 +- tests/regression.at | 6 +++--- tests/skeletons.at | 2 +- tests/synclines.at | 2 +- tests/torture.at | 6 +++--- 8 files changed, 25 insertions(+), 23 deletions(-) diff --git a/tests/atlocal.in b/tests/atlocal.in index d059d630..9a2d19f0 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -63,24 +63,26 @@ fi ## Other. ## ## ------- ## -# Are special link options needed? -LDFLAGS='@LDFLAGS@' - -# Are special libraries needed? -LIBS="$abs_top_builddir/lib/libbison.a @LIBS@ @INTLLIBS@" - # Empty if no javac was found CONF_JAVAC='@CONF_JAVAC@' # Empty if no Java VM was found CONF_JAVA='@CONF_JAVA@' -# Empty if no xsltproc was found -: ${XSLTPROC='@XSLTPROC@'} - # We need egrep. : ${EGREP='@EGREP@'} # Use simple quotes (lib/quote.c). LC_CTYPE=C export LC_CTYPE + +# Are special link options needed? +LDFLAGS='@LDFLAGS@' + +# Are special libraries needed? +LIBS="$abs_top_builddir/lib/libbison.a @LIBS@ @INTLLIBS@" + +# Empty if no xsltproc was found +: ${XSLTPROC='@XSLTPROC@'} + +: ${PERL='@PERL@'} diff --git a/tests/calc.at b/tests/calc.at index a1c11e5f..9518c3c3 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -503,7 +503,7 @@ AT_CHECK([cat stderr], 0, [expout]) # Make sure we did not introduce bad spaces. Checked here because all # the skeletons are (or should be) exercized here. m4_define([AT_CHECK_SPACES], -[AT_CHECK([perl -ne ' +[AT_CHECK([$PERL -ne ' chomp; print "$.: {$_}\n" if (# No starting/ending empty lines. diff --git a/tests/input.at b/tests/input.at index ff1d3924..07c3e873 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1194,7 +1194,7 @@ AT_DATA([empty.y], start: ''; start: ' ]]) -AT_CHECK([[perl -e "print 'start: \'';" >> empty.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'';" >> empty.y || exit 77]]) AT_BISON_CHECK([empty.y], [1], [], [[empty.y:2.8-9: warning: empty character literal @@ -1209,7 +1209,7 @@ AT_DATA([two.y], start: 'ab'; start: 'ab ]]) -AT_CHECK([[perl -e "print 'start: \'ab';" >> two.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'ab';" >> two.y || exit 77]]) AT_BISON_CHECK([two.y], [1], [], [[two.y:2.8-11: warning: extra characters in character literal @@ -1224,7 +1224,7 @@ AT_DATA([three.y], start: 'abc'; start: 'abc ]]) -AT_CHECK([[perl -e "print 'start: \'abc';" >> three.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'abc';" >> three.y || exit 77]]) AT_BISON_CHECK([three.y], [1], [], [[three.y:2.8-12: warning: extra characters in character literal @@ -1253,7 +1253,7 @@ start: '\777' '\0' '\xfff' '\x0' # Beside we cannot even expect "echo '\0'" to output two characters # (well three with \n): at least Bash 3.2 converts the two-character # sequence "\0" into a single NUL character. -AT_CHECK([[perl -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \ +AT_CHECK([[$PERL -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \ || exit 77]]) AT_BISON_CHECK([input.y], [1], [], diff --git a/tests/local.at b/tests/local.at index 5c9b865e..2362e766 100644 --- a/tests/local.at +++ b/tests/local.at @@ -38,7 +38,7 @@ m4_define([m4_null_if], # Expect COUNT matches of the PERL-REGEXP in FILE. The file is # taken in "slurp" mode, i.e., one can match end-of-lines. m4_define([AT_MATCHES_CHECK], -[AT_CHECK([perl -0777 -ne ' +[AT_CHECK([$PERL -0777 -ne ' my $count = 0; s{$2}{ ++$count; "" }gem; printf "$count\n";' $1], [0], [$3 diff --git a/tests/regression.at b/tests/regression.at index 2f029939..758825c7 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1481,17 +1481,17 @@ AT_CHECK([[grep 'syntax error,' stderr.txt]], [[0]], # Check number of default reductions in inconsistent states to be sure # syntax error is detected before unnecessary reductions are performed. -AT_CHECK([[perl -0777 -ne 'print s/inconsistent default reduction//g;' \ +AT_CHECK([[$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \ < stdout.txt || exit 77]], [[0]], [[14]]) # Check number of default reductions in consistent states to be sure # it is performed before the syntax error is detected. -AT_CHECK([[perl -0777 -ne 'print s/\bconsistent default reduction//g;' \ +AT_CHECK([[$PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \ < stdout.txt || exit 77]], [[0]], [[2]]) # Check number of reallocs to be sure reallocated memory isn't somehow # lost between LAC invocations. -AT_CHECK([[perl -0777 -ne 'print s/\(realloc//g;' < stderr.txt \ +AT_CHECK([[$PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \ || exit 77]], [[0]], [[3]]) AT_BISON_OPTION_POPDEFS diff --git a/tests/skeletons.at b/tests/skeletons.at index 76cf0662..e23c3bb0 100644 --- a/tests/skeletons.at +++ b/tests/skeletons.at @@ -315,7 +315,7 @@ print '@output(@,@)', "\n"; (print "garbage"x10, "\n") for (1..1000); print "${M4}_divert_pop(0)\n"; ]]) -AT_CHECK([[perl gen-skel.pl > skel.c || exit 77]]) +AT_CHECK([[$PERL gen-skel.pl > skel.c || exit 77]]) AT_DATA([[input.y]], [[%skeleton "./skel.c" diff --git a/tests/synclines.at b/tests/synclines.at index e2b7005d..041ae194 100644 --- a/tests/synclines.at +++ b/tests/synclines.at @@ -64,7 +64,7 @@ m4_define([AT_SYNCLINES_COMPILE], # distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host # distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead -AT_CHECK([[perl -p -0777 - stderr <<\EOF +AT_CHECK([[$PERL -p -0777 - stderr <<\EOF s/^distcc\[\d+\] .*\n//gm; s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm; s/^([^:]+:\d+):[^#]*( #error)/$][1:$][2/gm; diff --git a/tests/torture.at b/tests/torture.at index 705e131e..a5e244b6 100644 --- a/tests/torture.at +++ b/tests/torture.at @@ -125,7 +125,7 @@ EOF ]]) AT_BISON_OPTION_POPDEFS -AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout]) +AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout]) mv stdout $1 ]) @@ -214,7 +214,7 @@ main (void) EOF ]]) -AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout]) +AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout]) mv stdout $1 AT_BISON_OPTION_POPDEFS ]) @@ -350,7 +350,7 @@ main (void) EOF ]]) -AT_CHECK([perl -w ./gengram.pl $2 || exit 77], 0, [stdout]) +AT_CHECK([$PERL -w ./gengram.pl $2 || exit 77], 0, [stdout]) mv stdout $1 AT_BISON_OPTION_POPDEFS ]) From 5b34bb31100247acddd4d0d3147bf25ad5be0ff7 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 20 Sep 2012 11:42:06 +0200 Subject: [PATCH 13/22] tests: minor improvements * tests/c++.at: Space changes. Use AT_YYERROR_DEFINE. * tests/local.at (AT_YYERROR_DEFINE): Issue errors on unknown languages. --- tests/c++.at | 9 ++++----- tests/local.at | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/c++.at b/tests/c++.at index 93675d4d..c44a2a59 100644 --- a/tests/c++.at +++ b/tests/c++.at @@ -1,4 +1,4 @@ -# Checking the output filenames. -*- Autotest -*- +# Checking the C++ Features. -*- Autotest -*- # Copyright (C) 2004-2005, 2007, 2009-2012 Free Software Foundation, # Inc. @@ -30,6 +30,7 @@ m4_define([AT_CHECK_DOXYGEN], [m4_fatal([invalid argument: $1])]) AT_SETUP([Doxygen $1 Documentation]) +AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"]) AT_DATA([input.yy], [[%skeleton "lalr1.cc" %locations @@ -38,10 +39,7 @@ AT_DATA([input.yy], %% exp:; %% -yy::parser::error (const location& l, const std::string& m) -{ - std::cerr << l << s << std::endl; -} +]AT_YYERROR_DEFINE[ ]]) AT_BISON_CHECK([-o input.cc input.yy], 0) @@ -94,6 +92,7 @@ EXTRACT_STATIC = AT_DOXYGEN_PRIVATE AT_CHECK([doxygen --version || exit 77], 0, ignore) AT_CHECK([doxygen], 0, [], [ignore]) +AT_BISON_OPTION_POPDEFS AT_CLEANUP m4_popdef([AT_DOXYGEN_PRIVATE]) diff --git a/tests/local.at b/tests/local.at index 2362e766..036b0a1d 100644 --- a/tests/local.at +++ b/tests/local.at @@ -405,7 +405,8 @@ void public void yyerror (String s) { System.err.println (s); - }]])])dnl + }]])], +[m4_fatal([$0: invalid language: ]AT_LANG)])dnl ]) From 39845e8e405f4aa74e93d04481c2c5d8004833fc Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 8 Oct 2012 09:12:10 +0200 Subject: [PATCH 14/22] skeletons: style changes * data/yacc.c, data/glr.c: Prefer Title case for (CPP) macro arguments. --- data/glr.c | 24 ++++++++++++------------ data/yacc.c | 18 +++++++++--------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/data/glr.c b/data/glr.c index 97efe894..9b8ff67c 100644 --- a/data/glr.c +++ b/data/glr.c @@ -241,24 +241,24 @@ b4_percent_code_get[]dnl # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else ]b4_c_function_def([YYID], [static int], [[int i], [i]])[ { @@ -289,8 +289,8 @@ b4_percent_code_get[]dnl #ifndef YYSETJMP # include # define YYJMP_BUF jmp_buf -# define YYSETJMP(env) setjmp (env) -# define YYLONGJMP(env, val) longjmp (env, val) +# define YYSETJMP(Env) setjmp (Env) +# define YYLONGJMP(Env, Val) longjmp (Env, Val) #endif /*-----------------. @@ -313,7 +313,7 @@ b4_percent_code_get[]dnl #endif])[ #ifndef YYASSERT -# define YYASSERT(condition) ((void) ((condition) || (abort (), 0))) +# define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0))) #endif /* YYFINAL -- State number of the termination state. */ @@ -972,8 +972,8 @@ yylhsNonterm (yyRuleNum yyrule) return yyr1[yyrule]; } -#define yypact_value_is_default(yystate) \ - ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[ +#define yypact_value_is_default(Yystate) \ + ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[ /** True iff LR state STATE has only a default reduction (regardless * of token). */ @@ -990,8 +990,8 @@ yydefaultAction (yyStateNum yystate) return yydefact[yystate]; } -#define yytable_value_is_error(yytable_value) \ - ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[ +#define yytable_value_is_error(Yytable_value) \ + ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[ /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN. * Result R means diff --git a/data/yacc.c b/data/yacc.c index 7bcbd7ca..736a9b20 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -404,24 +404,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else ]b4_c_function_def([YYID], [static int], [[int yyi], [yyi]])[ { @@ -680,11 +680,11 @@ static const ]b4_int_type_for([b4_table])[ yytable[] = ]b4_table[ }; -#define yypact_value_is_default(yystate) \ - ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[ +#define yypact_value_is_default(Yystate) \ + ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[ -#define yytable_value_is_error(yytable_value) \ - ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[ +#define yytable_value_is_error(Yytable_value) \ + ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[ static const ]b4_int_type_for([b4_check])[ yycheck[] = { From fa5303b8ff748b8feab0b2613773056ce9f3ff54 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 5 Oct 2012 10:55:11 -0700 Subject: [PATCH 15/22] yacc.c: initialize yylval in pure-parser mode See http://lists.gnu.org/archive/html/bison-patches/2012-08/msg00024.html (spreading over September and October). * data/yacc.c (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN) (YY_IGNORE_MAYBE_UNINITIALIZED_END, YYLVAL_INITIALIZE): New macros. Use them to suppress an unwanted GCC diagnostic. --- data/yacc.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/data/yacc.c b/data/yacc.c index 736a9b20..faf1d786 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -170,6 +170,28 @@ m4_define([b4_declare_scanner_communication_variables], [[ /* The lookahead symbol. */ int yychar; +]b4_pure_if([[ +#if defined __GNUC__ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__)) +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +static YYSTYPE yyval_default; +# define YYLVAL_INITIALIZE() (yylval = yyval_default) +#endif]])[ +#ifndef YYLVAL_INITIALIZE +# define YYLVAL_INITIALIZE() +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif + /* The semantic value of the lookahead symbol. */ YYSTYPE yylval;]b4_locations_if([[ @@ -1563,8 +1585,9 @@ b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[ The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs;]b4_locations_if([[ - yylsp = yyls; + yylsp = yyls;]])[ + YYLVAL_INITIALIZE ();]b4_locations_if([[ #if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = ]b4_location_initial_line[; @@ -1750,7 +1773,9 @@ yyread_pushed_token:]])[ YY_LAC_DISCARD ("shift");]])[ yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END ]b4_locations_if([ *++yylsp = yylloc;])[ goto yynewstate; @@ -1970,7 +1995,9 @@ yyerrlab1: current lookahead token, the shift below will for sure. */ YY_LAC_DISCARD ("error recovery");]])[ + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END ]b4_locations_if([[ yyerror_range[2] = yylloc; /* Using YYLLOC is tempting, but would change the location of From 8f8439cee10db2ba526f3797e163b16c1d4f0c9d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 8 Oct 2012 09:02:09 +0200 Subject: [PATCH 16/22] tests: no longer disable -O compiler options Tests are running without -O since f377f69fec28013c79db4efe12bbb9d48987fb2c because some warnings (about yylval not being initialized) show only when GCC is given -O2. The previous patch fixes the warnings. Run the test suite with compiler options unmodified. * tests/atlocal.in (O0CFLAGS, O0CXXFLAGS): Remove, use CFLAGS and CXXFLAGS. --- NEWS | 13 +++++++++++++ tests/atlocal.in | 11 ++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index b5c89040..b06a1112 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,19 @@ GNU Bison NEWS will use YY_CALC_LIB_PARSE_H_INCLUDED as guard. +** Fix compiler warnings in the generated parser (yacc.c) + + The compilation of pure parsers (%define api.pure) can trigger GCC + warnings such as: + + input.c: In function 'yyparse': + input.c:1503:12: warning: 'yylval' may be used uninitialized in this + function [-Wmaybe-uninitialized] + *++yyvsp = yylval; + ^ + + This is now fixed; pragmas to avoid these warnings are no longer needed. + * Noteworthy changes in release 2.6.2 (2012-08-03) [stable] ** Bug fixes diff --git a/tests/atlocal.in b/tests/atlocal.in index 9a2d19f0..2f682592 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -29,16 +29,10 @@ CPPFLAGS="-I$abs_top_builddir/lib @CPPFLAGS@" # Is the compiler GCC? GCC='@GCC@' -# We want no optimization, as they uncover warnings (therefore, -# failures) about uninitialized variables in the test suite. FIXME: -# fix the warnings, not the flags. - O0CFLAGS=`echo '@CFLAGS@' | sed 's/-O[0-9s] *//g'` -O0CXXFLAGS=`echo '@CXXFLAGS@' | sed 's/-O[0-9s] *//g'` - # Sometimes a test group needs to ignore gcc warnings, so it locally # sets CFLAGS to this. - NO_WERROR_CFLAGS="$O0CFLAGS @WARN_CFLAGS@ @WARN_CFLAGS_TEST@" -NO_WERROR_CXXFLAGS="$O0CXXFLAGS @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@" + NO_WERROR_CFLAGS='@CFLAGS@ @WARN_CFLAGS@ @WARN_CFLAGS_TEST@' +NO_WERROR_CXXFLAGS='@CXXFLAGS@ @WARN_CXXFLAGS@ @WARN_CXXFLAGS_TEST@' # But most of the time, we want -Werror. CFLAGS="$NO_WERROR_CFLAGS @WERROR_CFLAGS@" @@ -51,7 +45,6 @@ BISON_CXX_WORKS='@BISON_CXX_WORKS@' if "$at_arg_compile_c_with_cxx"; then CC_IS_CXX=1 CC=$CXX - O0CFLAGS=$O0CXXFLAGS NO_WERROR_CFLAGS=$NO_WERROR_CXXFLAGS CFLAGS=$CXXFLAGS else From 19d9b60787a5b9340b8adf4b3e918c356bb2bd90 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 8 Oct 2012 09:17:20 +0200 Subject: [PATCH 17/22] warnings: avoid warnings from clang Fix the following warning parse-gram.c:2078:14: error: equality comparison with extraneous parentheses [-Werror,-Wparentheses-equality] if (((yyn) == (-91))) ~~~~~~^~~~~~~~ parse-gram.c:2078:14: note: remove extraneous parentheses around the comparison to silence this warning if (((yyn) == (-91))) ~ ^ ~ parse-gram.c:2078:14: note: use '=' to turn this equality comparison into an assignment if (((yyn) == (-91))) ^~ = 1 error generated. and the following one: input.cc:740:1: error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn] static void yyMemoryExhausted (yyGLRStack* yystackp) __attribute__ ((__noreturn__)); static void yyMemoryExhausted (yyGLRStack* yystackp) { YYLONGJMP (yystackp->yyexception_buffer, 2); } ^ 1 warning and 1 error generated. This is Apple clang version 3.1 (tags/Apple/clang-318.0.61). * data/c.m4 (b4_table_value_equals): Use (!!(A == B)) instead of (A == B) to avoid this warning. Any reasonable compiler should generate the same code. * src/uniqstr.h (UNIQSTR_EQ): Likewise. * data/glr.c (LONGJMP): abort after longjmp to pacify clang. --- data/c.m4 | 2 +- data/glr.c | 3 ++- src/uniqstr.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/data/c.m4 b/data/c.m4 index fd2203eb..994d2964 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -184,7 +184,7 @@ m4_define([b4_table_value_equals], [m4_if(m4_eval($3 < m4_indir([b4_]$1[_min]) || m4_indir([b4_]$1[_max]) < $3), [1], [[YYID (0)]], - [[((]$2[) == (]$3[))]])]) + [(!!(($2) == ($3)))])]) ## ---------## diff --git a/data/glr.c b/data/glr.c index 9b8ff67c..79d6ffd0 100644 --- a/data/glr.c +++ b/data/glr.c @@ -290,7 +290,8 @@ b4_percent_code_get[]dnl # include # define YYJMP_BUF jmp_buf # define YYSETJMP(Env) setjmp (Env) -# define YYLONGJMP(Env, Val) longjmp (Env, Val) +// Pacify clang. +# define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0)) #endif /*-----------------. diff --git a/src/uniqstr.h b/src/uniqstr.h index 913da39f..677ecc42 100644 --- a/src/uniqstr.h +++ b/src/uniqstr.h @@ -36,7 +36,7 @@ uniqstr uniqstr_vsprintf (char const *format, ...) __attribute__ ((__format__ (__printf__, 1, 2))); /* Two uniqstr values have the same value iff they are the same. */ -#define UNIQSTR_EQ(USTR1, USTR2) ((USTR1) == (USTR2)) +#define UNIQSTR_EQ(USTR1, USTR2) (!!((USTR1) == (USTR2))) /* Compare two uniqstr a la strcmp: negative for <, nul for =, and positive for >. Undefined order, relies on addresses. */ From 7b70847e5834fdb3265db8629167353b86b43173 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 8 Oct 2012 13:46:50 +0200 Subject: [PATCH 18/22] NEWS: warnings with clang * NEWS: here. --- NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index b06a1112..220d9ed1 100644 --- a/NEWS +++ b/NEWS @@ -27,7 +27,7 @@ GNU Bison NEWS will use YY_CALC_LIB_PARSE_H_INCLUDED as guard. -** Fix compiler warnings in the generated parser (yacc.c) +** Fix compiler warnings in the generated parser (yacc.c, glr.c) The compilation of pure parsers (%define api.pure) can trigger GCC warnings such as: @@ -40,6 +40,10 @@ GNU Bison NEWS This is now fixed; pragmas to avoid these warnings are no longer needed. + Warnings from clang ("equality comparison with extraneous parentheses" and + "function declared 'noreturn' should not return") have also been + addressed. + * Noteworthy changes in release 2.6.2 (2012-08-03) [stable] ** Bug fixes From ae2199381ee5eef2379e34376b77a36d99739cb6 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 12 Oct 2012 10:10:18 +0200 Subject: [PATCH 19/22] tests: check %no-lines * tests/synclines.at: here. --- tests/synclines.at | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/synclines.at b/tests/synclines.at index 041ae194..63ae6858 100644 --- a/tests/synclines.at +++ b/tests/synclines.at @@ -216,4 +216,54 @@ exp: '0'; [input.y:8: #error "8" ]) +## -------------------- ## +## %code top syncline. ## +## -------------------- ## + +AT_TEST([%code top syncline], +[[%code top { +#error "2" +} +%{ +]AT_YYERROR_DECLARE_EXTERN[ +]AT_YYLEX_DECLARE_EXTERN[ +%} +%% +exp: '0'; +%% +]], +[input.y:2: #error "2" +]) + +m4_popdef([AT_TEST]) + +## ----------- ## +## %no-lines. ## +## ----------- ## + +m4_pushdef([AT_TEST], +[AT_SETUP([%no-lines]) + +AT_BISON_OPTION_PUSHDEFS([%skeleton "$1" %defines]) +AT_DATA_GRAMMAR([input.y], +[%skeleton "$1" %defines +%{ +]AT_YYERROR_DECLARE_EXTERN[ +]AT_YYLEX_DECLARE_EXTERN[ +%} +%% +exp: '0' +]) +AT_BISON_CHECK([--no-lines -o input.AT_SKEL_CC_IF([cc], [c]) -d input.y]) +AT_CHECK([[grep '#line' ]AT_SKEL_CC_IF([*.cc *.hh], [*.c *.h])], 1) +AT_BISON_OPTION_POPDEFS + +AT_CLEANUP +]) + +AT_TEST([yacc.c]) +AT_TEST([glr.c]) +AT_TEST([lalr1.cc]) +AT_TEST([glr.cc]) + m4_popdef([AT_TEST]) From cc5a986ce43372e5349b0e86718fd808a633a404 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 19 Oct 2012 11:36:18 +0200 Subject: [PATCH 20/22] gnulib: update --- gnulib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnulib b/gnulib index dcf27bef..d245e6dd 160000 --- a/gnulib +++ b/gnulib @@ -1 +1 @@ -Subproject commit dcf27bef48c9800d5a2be8349226f73f1b8ff2e5 +Subproject commit d245e6ddd6ab2624d0d83acd8f111454f984f50f From 6eb8f74f8fa3cea393c0de27599f0e70bb1e106c Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 22 Oct 2012 15:16:12 +0200 Subject: [PATCH 21/22] version 2.6.3 * NEWS: Record release date. --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 220d9ed1..2cdb4987 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ GNU Bison NEWS -* Noteworthy changes in release ?.? (????-??-??) [?] +* Noteworthy changes in release 2.6.3 (2012-10-22) [stable] ** Bug fixes From a4eb820f17de135bb4b0f6503ab22ea7b0595999 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 22 Oct 2012 15:28:10 +0200 Subject: [PATCH 22/22] maint: post-release administrivia * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update. --- .prev-version | 2 +- NEWS | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.prev-version b/.prev-version index 097a15a2..ec1cf33c 100644 --- a/.prev-version +++ b/.prev-version @@ -1 +1 @@ -2.6.2 +2.6.3 diff --git a/NEWS b/NEWS index 2cdb4987..083d90a9 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,8 @@ GNU Bison NEWS +* Noteworthy changes in release ?.? (????-??-??) [?] + + * Noteworthy changes in release 2.6.3 (2012-10-22) [stable] ** Bug fixes