From: Theophile Ranquet Date: Mon, 10 Dec 2012 16:01:55 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/maint' X-Git-Tag: v2.7.90~261 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/0906b12cd56f9777fb684b8a257a0e56c090a93c Merge remote-tracking branch 'origin/maint' * origin/maint: news: prepare for forthcoming release doc: explain how mid-rule actions are translated error: use better locations for unused midrule values doc: various minor improvements and fixes tests: ignore more useless compiler warnings tests: be robust to C being compiled with a C++11 compiler build: beware of Clang++ not supporting POSIXLY_CORRECT maint: post-release administrivia version 2.6.90 build: fix syntax-check error. cpp: simplify the Flex version checking macro news: improve the carets example and fix a typo cpp: improve the Flex version checking macro carets: improve the code maint: update news build: keep -Wmissing-declarations and -Wmissing-prototypes for modern GCCs build: drop -Wcast-qual gnulib: update Conflicts: NEWS doc/Makefile.am doc/bison.texi gnulib src/reader.c tests/actions.at tests/atlocal.in tests/input.at --- 0906b12cd56f9777fb684b8a257a0e56c090a93c diff --cc NEWS index eabdcc6e,d16ac50b..7df5d87e --- a/NEWS +++ b/NEWS @@@ -2,295 -2,66 +2,311 @@@ GNU Bison NEW * Noteworthy changes in release ?.? (????-??-??) [?] +** Incompatible changes + +*** Obsolete features + + Support for YYFAIL is removed (deprecated in Bison 2.4.2). + Support for yystype and yyltype (instead of YYSTYPE and YYLTYPE) + is removed (deprecated in Bison 1.875). + Support for YYPARSE_PARAM is removed (deprecated in Bison 1.875). + +** Warnings + +*** Enhancements of the -Werror option + + The -Werror=CATEGORY option is now recognized, and will treat specified + warnings as errors. The warnings need not have been explicitly activated + using the -W option, this is similar to what GCC 4.7 does. + + For example, given the following command line, Bison will treat both + warnings related to POSIX Yacc incompatibilities and S/R conflicts as + errors (and only those): + + $ bison -Werror=yacc,error=conflicts-sr input.y + + If no categories are specified, -Werror will make all active warnings into + errors. For example, the following line does the same the previous example: + + $ bison -Werror -Wnone -Wyacc -Wconflicts-sr input.y + + (By default -Wconflicts-sr,conflicts-rr,deprecated,other is enabled.) + + Note that the categories in this -Werror option may not be prefixed with + "no-". However, -Wno-error[=CATEGORY] is valid. + + Note that -y enables -Werror=yacc. Therefore it is now possible to require + Yacc-like behavior (e.g., always generate y.tab.c), but to report + incompatibilities as warnings: "-y -Wno-error=yacc". + +*** The display of warnings is now richer + + The option that controls a given warning is now displayed: + + foo.y:4.6: warning: type clash on default action: != [-Wother] + + In the case of warnings treated as errors, the prefix is changed from + "warning: " to "error: ", and the suffix is displayed, in a manner similar + to GCC, as [-Werror=CATEGORY]. + + For instance, where the previous version of Bison would report (and exit + with failure): + + bison: warnings being treated as errors + input.y:1.1: warning: stray ',' treated as white space + + it now reports: + + input.y:1.1: error: stray ',' treated as white space [-Werror=other] + +*** Deprecated constructs + + The new 'deprecated' warning category flags obsolete constructs whose + support will be discontinued. It is enabled by default. These warnings + used to be reported as 'other' warnings. + +*** Useless semantic types + + Bison now warns about useless (uninhabited) semantic types. Since + semantic types are not declared to Bison (they are defined in the opaque + %union structure), it is %printer/%destructor directives about useless + types that trigger the warning: + + %token term + %type nterm + %printer {} + %destructor {} + %% + nterm: term { $$ = $1; }; + + 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 + +*** Undefined but unused 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"; + +*** Useless destructors or printers + + Bison now warns about useless destructors or printers. In the following + example, the printer for , and the destructor for are + useless: all symbols of (token1) already have a printer, and all + symbols of type (token2) already have a destructor. + + %token token1 + token2 + token3 + token4 + %printer {} token1 + %destructor {} token2 + +*** Conflicts + + The warnings and error messages about shift/reduce and reduce/reduce + conflicts have been normalized. For instance on the following foo.y file: + + %glr-parser + %% + exp: exp '+' exp | '0' | '0'; + + compare the previous version of bison: + + $ bison foo.y + foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce + $ bison -Werror foo.y + bison: warnings being treated as errors + foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce + + with the new behavior: + + $ bison foo.y + foo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr] + foo.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr] + $ bison -Werror foo.y + foo.y: error: 1 shift/reduce conflict [-Werror=conflicts-sr] + foo.y: error: 2 reduce/reduce conflicts [-Werror=conflicts-rr] + + When %expect or %expect-rr is used, such as with bar.y: + + %expect 0 + %glr-parser + %% + exp: exp '+' exp | '0' | '0'; + + Former behavior: + + $ bison bar.y + bar.y: conflicts: 1 shift/reduce, 2 reduce/reduce + bar.y: expected 0 shift/reduce conflicts + bar.y: expected 0 reduce/reduce conflicts + + New one: + + $ bison bar.y + bar.y: error: shift/reduce conflicts: 1 found, 0 expected + bar.y: error: reduce/reduce conflicts: 2 found, 0 expected + +** Additional yylex/yyparse arguments + + The new directive %param declares additional arguments to both yylex and + yyparse. The %lex-param, %parse-param, and %param directives support one + or more arguments. Instead of + + %lex-param {arg1_type *arg1} + %lex-param {arg2_type *arg2} + %parse-param {arg1_type *arg1} + %parse-param {arg2_type *arg2} + + one may now declare + + %param {arg1_type *arg1} {arg2_type *arg2} + +** Java skeleton improvements + + The constants for token names were moved to the Lexer interface. Also, it + is possible to add code to the parser's constructors using "%code init" + and "%define init_throws". + +** C++ skeletons improvements + +*** The parser header is no longer mandatory (lalr1.cc, glr.cc) + + Using %defines is now optional. Without it, the needed support classes + are defined in the generated parser, instead of additional files (such as + location.hh, position.hh and stack.hh). + +*** Locations are no longer mandatory (lalr1.cc, glr.cc) + + Both lalr1.cc and glr.cc no longer require %location. + +*** syntax_error exception (lalr1.cc) + + The C++ parser features a syntax_error exception, which can be + thrown from the scanner or from user rules to raise syntax errors. + This facilitates reporting errors caught in sub-functions (e.g., + rejecting too large integral literals from a conversion function + used by the scanner, or rejecting invalid combinations from a + factory invoked by the user actions). + +** Variable api.token.prefix + + The variable api.token.prefix changes the way tokens are identified in + the generated files. This is especially useful to avoid collisions + with identifiers in the target language. For instance + + %token FILE for ERROR + %define api.token.prefix "TOK_" + %% + start: FILE for ERROR; + + will generate the definition of the symbols TOK_FILE, TOK_for, and + TOK_ERROR in the generated sources. In particular, the scanner must + use these prefixed token names, although the grammar itself still + uses the short names (as in the sample rule given above). + +** Renamed %define variables + + The following variables have been renamed for consistency. Backward + compatibility is ensured, but upgrading is recommended. + + lr.default-reductions -> lr.default-reduction + lr.keep-unreachable-states -> lr.keep-unreachable-state + namespace -> api.namespace + +** Variable parse.error + + This variable controls the verbosity of error messages. The use of the + %error-verbose directive is deprecated in favor of "%define parse.error + verbose". + +** Semantic predicates + + The new, experimental, semantic-predicate feature allows actions of the + form "%?{ BOOLEAN-EXPRESSION }", which cause syntax errors (as for + YYERROR) if the expression evaluates to 0, and are evaluated immediately + in GLR parsers, rather than being deferred. The result is that they allow + the programmer to prune possible parses based on the values of run-time + expressions. + +** The directive %expect-rr is now an error in non GLR mode + + It used to be an error only if used in non GLR mode, _and_ if there are + reduce/reduce conflicts. + +* Noteworthy changes in release ?.? (????-??-??) [?] + +** %language is no longer an experimental feature. + + The introduction of this feature, in 2.4, was four years ago. The --language + option and the %language directive are no longer experimental. + - ** New format for error reports: carets + ** Bug fixes - Caret errors have been added to Bison, for example (taken from the - documentation): + Warnings about uninitialized yylloc in yyparse have been fixed. - input.y:3.20-23: error: ambiguous reference: '$exp' - exp: exp '+' exp { $exp = $1 + $2; }; - ^^^^ + ** Diagnostics are improved - The default behaviour for now is still not to display these unless explictly - asked with -fall of -fcaret. However, in a later release, it will be made the - default behavior (but may still be deactivated with -fno-caret). + *** Changes in the format of error messages - ** New value for %define variable: api.pure full + This used to be the format of many error reports: - The %define variable api.pure requests a pure (reentrant) parser. However, - for historical reasons, using it in a location-tracking Yacc parser resulted - in an yyerror function that did not take a location as a parameter. With this - new value, the user may request a better pure parser, where yyerror does take - a location as a parameter (in location-tracking parsers). + input.y:2.7-12: %type redeclaration for exp + input.y:1.7-12: previous declaration - The use of "%define api.pure true" is deprecated in favor of this new - "%define api.pure full". + It is now: - ** Changes in the format of error messages + input.y:2.7-12: error: %type redeclaration for exp + input.y:1.7-12: previous declaration - This used to be the format of many error reports: + *** New format for error reports: carets - foo.y:5.10-24: result type clash on merge function 'merge': != - foo.y:4.13-27: previous declaration + Caret errors have been added to Bison: - It is now: + input.y:2.7-12: error: %type redeclaration for exp + %type exp + ^^^^^^ + input.y:1.7-12: previous declaration + %type exp + ^^^^^^ - foo.y:5.10-25: result type clash on merge function 'merge': != - foo.y:4.13-27: previous declaration + or - ** Exception safety (lalr1.cc) + input.y:3.20-23: error: ambiguous reference: '$exp' + exp: exp '+' exp { $exp = $1 + $3; }; + ^^^^ + input.y:3.1-3: refers to: $exp at $$ + exp: exp '+' exp { $exp = $1 + $3; }; + ^^^ + input.y:3.6-8: refers to: $exp at $1 + exp: exp '+' exp { $exp = $1 + $3; }; + ^^^ + input.y:3.14-16: refers to: $exp at $3 + exp: exp '+' exp { $exp = $1 + $3; }; + ^^^ + + The default behaviour for now is still not to display these unless + explictly asked with -fcaret (or -fall). However, in a later release, it + will be made the default behavior (but may still be deactivated with + -fno-caret). - The parse function now catches exceptions, uses the %destructors to - release memory (the lookahead symbol and the symbols pushed on the stack) - before re-throwing the exception. + ** New value for %define variable: api.pure full - This feature is somewhat experimental. User feedback would be - appreciated. + The %define variable api.pure requests a pure (reentrant) parser. However, + for historical reasons, using it in a location-tracking Yacc parser + resulted in a yyerror function that did not take a location as a + parameter. With this new value, the user may request a better pure parser, + where yyerror does take a location as a parameter (in location-tracking + parsers). + + The use of "%define api.pure true" is deprecated in favor of this new + "%define api.pure full". ** New %define variable: api.location.type (glr.cc, lalr1.cc, lalr1.java) diff --cc cfg.mk index 1aa1c1ab,e77312ee..e77fe89e --- a/cfg.mk +++ b/cfg.mk @@@ -77,10 -83,11 +77,11 @@@ $(call exclude, prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$ \ prohibit_always-defined_macros+=?|^tests/regression.at$$ \ prohibit_defined_have_decl_tests=?|^lib/timevar.c$$ \ + prohibit_doubled_word=^tests/named-refs.at$$ \ prohibit_magic_number_exit=^doc/bison.texi$$ \ prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$ \ + prohibit_strcmp=^doc/bison\.texi$$ \ require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$ \ space_tab=^tests/(input|c\+\+)\.at$$ \ - trailing_blank=^src/parse-gram.[ch]$$ \ unmarked_diagnostics=^(djgpp/|doc/bison.texi$$|tests/c\+\+\.at$$) \ ) diff --cc configure.ac index a4eb373e,e6403f4b..eb39c617 --- a/configure.ac +++ b/configure.ac @@@ -69,11 -81,9 +83,10 @@@ AC_ARG_ENABLE([gcc-warnings] [enable_gcc_warnings=no]) if test "$enable_gcc_warnings" = yes; then warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align - -Wcast-qual -Wformat -Wpointer-arith -Wwrite-strings' - warn_c='-Wbad-function-cast -Wmissing-declarations -Wmissing-prototypes - -Wshadow -Wstrict-prototypes' + -Wformat -Wpointer-arith -Wwrite-strings' + warn_c='-Wbad-function-cast -Wshadow -Wstrict-prototypes' warn_cxx='-Wnoexcept' + AC_LANG_PUSH([C]) # Clang supports many of GCC's -W options, but only issues warnings # on the ones it does not recognize. In that case, gl_WARN_ADD diff --cc doc/bison.texi index 28af1ae6,a508b9c1..e0c321bc --- a/doc/bison.texi +++ b/doc/bison.texi @@@ -12088,21 -11558,9 +12234,22 @@@ the grammar file. @xref{Grammar Outlin Grammar}. @end deffn +@deffn {Directive} %?@{@var{expression}@} +Predicate actions. This is a type of action clause that may appear in +rules. The expression is evaluated, and if false, causes a syntax error. In +GLR parsers during nondeterministic operation, +this silently causes an alternative parse to die. During deterministic +operation, it is the same as the effect of YYERROR. +@xref{Semantic Predicates}. + +This feature is experimental. +More user feedback will help to determine whether it should become a permanent +feature. +@end deffn + - @deffn {Construct} /*@dots{}*/ - Comment delimiters, as in C. + @deffn {Construct} /* @dots{} */ + @deffnx {Construct} // @dots{} + Comments, as in C/C++. @end deffn @deffn {Delimiter} : diff --cc m4/c-working.m4 index ee84acf9,de1a4c5a..999c52de --- a/m4/c-working.m4 +++ b/m4/c-working.m4 @@@ -21,9 -21,10 +21,10 @@@ AC_DEFUN([BISON_TEST_FOR_WORKING_C_COMP AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include - int test_array[CHAR_BIT];]])], + int test_array[CHAR_BIT];]])], [], [AC_MSG_FAILURE([cannot compile a simple C program])]) + AC_SUBST([BISON_C_WORKS], [:]) ]) # BISON_CHECK_WITH_POSIXLY_CORRECT(CODE) diff --cc src/reader.c index fb17b018,735e700d..a2f3bfb1 --- a/src/reader.c +++ b/src/reader.c @@@ -324,11 -322,12 +324,11 @@@ grammar_rule_check (const symbol_list * /* The default action, $$ = $1, `uses' both. */ && (r->action_props.code || (n != 0 && n != 1))) { - void (*warn_at_ptr)(location, char const*, ...) = - midrule_warning ? midrule_value_at : warn_at; + warnings warn_flag = midrule_warning ? Wmidrule_values : Wother; if (n) - complain (&r->location, warn_flag, _("unused value: $%d"), n); - warn_at_ptr (l->location, _("unused value: $%d"), n); ++ complain (&l->location, warn_flag, _("unused value: $%d"), n); else - complain (&r->location, warn_flag, _("unset value: $$")); - warn_at_ptr (l->location, _("unset value: $$")); ++ complain (&l->location, warn_flag, _("unset value: $$")); } } } diff --cc tests/actions.at index cd7a58b6,17d9193f..f62c43dd --- a/tests/actions.at +++ b/tests/actions.at @@@ -1323,25 -1300,17 +1323,25 @@@ main (void AT_BISON_OPTION_POPDEFS AT_BISON_CHECK([-o input.c input.y], 0,, -[[input.y:33.3-23: warning: unset value: $$ -input.y:32.3-23: warning: unused value: $3 +[[input.y:24.70-72: warning: useless %destructor for type <*> [-Wother] +input.y:24.70-72: warning: useless %printer for type <*> [-Wother] +input.y:33.3-23: warning: unset value: $$ [-Wother] - input.y:30.3-35.37: warning: unused value: $3 [-Wother] ++input.y:32.3-23: warning: unused value: $3 [-Wother] ]]) AT_BISON_CHECK([-fcaret -o input.c input.y], 0,, -[[input.y:33.3-23: warning: unset value: $$ +[[input.y:24.70-72: warning: useless %destructor for type <*> [-Wother] + %printer { fprintf (yyoutput, "<*> printer should not be called"); } <*> + ^^^ +input.y:24.70-72: warning: useless %printer for type <*> [-Wother] + %printer { fprintf (yyoutput, "<*> printer should not be called"); } <*> + ^^^ +input.y:33.3-23: warning: unset value: $$ [-Wother] { @$ = 4; } // Only used. ^^^^^^^^^^^^^^^^^^^^^ - input.y:30.3-35.37: warning: unused value: $3 [-Wother] - { @$ = 1; } // Not set or used. - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:32.3-23: warning: unused value: $3 ++input.y:32.3-23: warning: unused value: $3 [-Wother] + { USE ($$); @$ = 3; } // Only set. + ^^^^^^^^^^^^^^^^^^^^^ ]]) AT_COMPILE([input]) diff --cc tests/atlocal.in index a545e5e2,f817f949..bdc6d47c --- a/tests/atlocal.in +++ b/tests/atlocal.in @@@ -38,12 -47,21 +47,23 @@@ NO_WERROR_CXXFLAGS='@CXXFLAGS@ @WARN_CX CFLAGS="$NO_WERROR_CFLAGS @WERROR_CFLAGS@" CXXFLAGS="$NO_WERROR_CXXFLAGS @WERROR_CXXFLAGS@" -# If 'exit 77'; skip all C/C++ tests; otherwise ':'. -BISON_C_WORKS='@BISON_C_WORKS@' +# C++ variants break strict aliasing analysis. +NO_STRICT_ALIAS_CXXFLAGS='@NO_STRICT_ALIAS_CXXFLAGS@' + +# If 'exit 77'; skip all C++ tests; otherwise ':'. BISON_CXX_WORKS='@BISON_CXX_WORKS@' + # Whether the compiler supports POSIXLY_CORRECT defined. + : ${C_COMPILER_POSIXLY_CORRECT='@C_COMPILER_POSIXLY_CORRECT@'} + : ${CXX_COMPILER_POSIXLY_CORRECT='@CXX_COMPILER_POSIXLY_CORRECT@'} + + if $POSIXLY_CORRECT_IS_EXPORTED; then + $C_COMPILER_POSIXLY_CORRECT || + BISON_C_WORKS="as_fn_error 77 POSIXLY_CORRECT" + $CXX_COMPILER_POSIXLY_CORRECT || + BISON_CXX_WORKS="as_fn_error 77 POSIXLY_CORRECT" + fi + # Handle --compile-c-with-cxx here, once CXX and CXXFLAGS are known. if "$at_arg_compile_c_with_cxx"; then CC_IS_CXX=1 diff --cc tests/input.at index 7f5fb887,6b876334..5e5b1e8f --- a/tests/input.at +++ b/tests/input.at @@@ -169,42 -174,109 +169,109 @@@ l: INT | INT { $$ = $ _AT_UNUSED_VALUES_DECLARATIONS]) ) - AT_BISON_CHECK(m4_ifval($2, [ --warnings=midrule-values ])[ input.y], [0], [], - [[input.y:11.10-32: warning: unset value: $]$[ [-Wother] - input.y:11.10-32: warning: unused value: $]1[ [-Wother] - input.y:11.10-32: warning: unused value: $]3[ [-Wother] - input.y:11.10-32: warning: unused value: $]5[ [-Wother] + AT_BISON_CHECK(m4_ifval($2, [--warnings=midrule-values ])[-fcaret input.y], + [0], [], -[[input.y:11.10-32: warning: unset value: $][$ ++[[input.y:11.10-32: warning: unset value: $][$ [-Wother] + a: INT | INT { } INT { } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^ -input.y:11.10-12: warning: unused value: $][1 ++input.y:11.10-12: warning: unused value: $][1 [-Wother] + a: INT | INT { } INT { } INT { }; + ^^^ -input.y:11.18-20: warning: unused value: $][3 ++input.y:11.18-20: warning: unused value: $][3 [-Wother] + a: INT | INT { } INT { } INT { }; + ^^^ -input.y:11.26-28: warning: unused value: $][5 ++input.y:11.26-28: warning: unused value: $][5 [-Wother] + a: INT | INT { } INT { } INT { }; + ^^^ -input.y:12.9: warning: empty rule for typed nonterminal, and no action +input.y:12.9: warning: empty rule for typed nonterminal, and no action [-Wother] - ]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $$ [-Wmidrule-values] - input.y:13.26-41: warning: unset value: $$ [-Wmidrule-values] - ]]])[[input.y:13.10-62: warning: unset value: $]$[ [-Wother] - input.y:13.10-62: warning: unused value: $]3[ [-Wother] - input.y:13.10-62: warning: unused value: $]5[ [-Wother] - ]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $$ [-Wmidrule-values] - ]]])[[input.y:14.10-49: warning: unset value: $]$[ [-Wother] - input.y:14.10-49: warning: unused value: $]3[ [-Wother] - input.y:14.10-49: warning: unused value: $]5[ [-Wother] - input.y:15.10-37: warning: unset value: $]$[ [-Wother] - input.y:15.10-37: warning: unused value: $]3[ [-Wother] - input.y:15.10-37: warning: unused value: $]5[ [-Wother] - input.y:17.10-58: warning: unset value: $]$[ [-Wother] - input.y:17.10-58: warning: unused value: $]1[ [-Wother] - ]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]2[ [-Wmidrule-values] - ]]])[[input.y:17.10-58: warning: unused value: $]3[ [-Wother] - ]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]4[ [-Wmidrule-values] - ]]])[[input.y:17.10-58: warning: unused value: $]5[ [-Wother] - input.y:18.10-72: warning: unset value: $]$[ [-Wother] - input.y:18.10-72: warning: unused value: $]1[ [-Wother] - input.y:18.10-72: warning: unused value: $]3[ [-Wother] - ]]m4_ifval($2, [[[input.y:18.10-72: warning: unused value: $]4[ [-Wmidrule-values] - ]]])[[input.y:18.10-72: warning: unused value: $]5[ [-Wother] - ]]m4_ifval($2, [[[input.y:20.10-55: warning: unused value: $]3[ [-Wmidrule-values] - ]]])[[input.y:21.10-68: warning: unset value: $]$[ [-Wother] - input.y:21.10-68: warning: unused value: $]1[ [-Wother] - input.y:21.10-68: warning: unused value: $]2[ [-Wother] - ]]m4_ifval($2, [[[input.y:21.10-68: warning: unused value: $]4[ [-Wmidrule-values] - ]]]))]) - + b: INT | /* empty */; + ^ -]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $][$ ++]]m4_ifval($2, [[[input.y:13.14-20: warning: unset value: $][$ [-Wmidrule-values] + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^ -input.y:13.26-41: warning: unset value: $][$ ++input.y:13.26-41: warning: unset value: $][$ [-Wmidrule-values] + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^^^^^^^^^^ -]]])[[input.y:13.10-62: warning: unset value: $][$ ++]]])[[input.y:13.10-62: warning: unset value: $][$ [-Wother] + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:13.22-24: warning: unused value: $][3 ++input.y:13.22-24: warning: unused value: $][3 [-Wother] + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^ -input.y:13.43-45: warning: unused value: $][5 ++input.y:13.43-45: warning: unused value: $][5 [-Wother] + c: INT | INT { $][1; } INT { $2; } INT { $4; }; + ^^^ -]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $][$ ++]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $][$ [-Wmidrule-values] + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ -]]])[[input.y:14.10-49: warning: unset value: $][$ ++]]])[[input.y:14.10-49: warning: unset value: $][$ [-Wother] + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:14.18-20: warning: unused value: $][3 ++input.y:14.18-20: warning: unused value: $][3 [-Wother] + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ -input.y:14.30-32: warning: unused value: $][5 ++input.y:14.30-32: warning: unused value: $][5 [-Wother] + d: INT | INT { } INT { $][1; } INT { $2; }; + ^^^ -input.y:15.10-37: warning: unset value: $][$ ++input.y:15.10-37: warning: unset value: $][$ [-Wother] + e: INT | INT { } INT { } INT { $][1; }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:15.18-20: warning: unused value: $][3 ++input.y:15.18-20: warning: unused value: $][3 [-Wother] + e: INT | INT { } INT { } INT { $][1; }; + ^^^ -input.y:15.27-29: warning: unused value: $][5 ++input.y:15.27-29: warning: unused value: $][5 [-Wother] + e: INT | INT { } INT { } INT { $][1; }; + ^^^ -input.y:17.10-58: warning: unset value: $][$ ++input.y:17.10-58: warning: unset value: $][$ [-Wother] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:17.10-12: warning: unused value: $][1 ++input.y:17.10-12: warning: unused value: $][1 [-Wother] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ -]]m4_ifval($2, [[[input.y:17.14-29: warning: unused value: $][2 ++]]m4_ifval($2, [[[input.y:17.14-29: warning: unused value: $][2 [-Wmidrule-values] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^ -]]])[[input.y:17.31-33: warning: unused value: $][3 ++]]])[[input.y:17.31-33: warning: unused value: $][3 [-Wother] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ -]]m4_ifval($2, [[[input.y:17.35-50: warning: unused value: $][4 ++]]m4_ifval($2, [[[input.y:17.35-50: warning: unused value: $][4 [-Wmidrule-values] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^^^^^^^^^^^^^^ -]]])[[input.y:17.52-54: warning: unused value: $][5 ++]]])[[input.y:17.52-54: warning: unused value: $][5 [-Wother] + g: INT | INT { $$; } INT { $$; } INT { }; + ^^^ -input.y:18.10-72: warning: unset value: $][$ ++input.y:18.10-72: warning: unset value: $][$ [-Wother] + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:18.10-12: warning: unused value: $][1 ++input.y:18.10-12: warning: unused value: $][1 [-Wother] + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ -input.y:18.31-33: warning: unused value: $][3 ++input.y:18.31-33: warning: unused value: $][3 [-Wother] + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ -]]m4_ifval($2, [[[input.y:18.35-64: warning: unused value: $][4 ++]]m4_ifval($2, [[[input.y:18.35-64: warning: unused value: $][4 [-Wmidrule-values] + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -]]])[[input.y:18.66-68: warning: unused value: $][5 ++]]])[[input.y:18.66-68: warning: unused value: $][5 [-Wother] + h: INT | INT { $$; } INT { $$ = $2; } INT { }; + ^^^ -]]m4_ifval($2, [[[input.y:20.18-37: warning: unused value: $][3 ++]]m4_ifval($2, [[[input.y:20.18-37: warning: unused value: $][3 [-Wmidrule-values] + j: INT | INT INT { $$ = 1; } { $][$ = $][1 + $][2; }; + ^^^^^^^^^^^^^^^^^^^^ -]]])[[input.y:21.10-68: warning: unset value: $][$ ++]]])[[input.y:21.10-68: warning: unset value: $][$ [-Wother] + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -input.y:21.10-12: warning: unused value: $][1 ++input.y:21.10-12: warning: unused value: $][1 [-Wother] + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^ -input.y:21.14-16: warning: unused value: $][2 ++input.y:21.14-16: warning: unused value: $][2 [-Wother] + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^ -]]m4_ifval($2, [[[input.y:21.35-64: warning: unused value: $][4 ++]]m4_ifval($2, [[[input.y:21.35-64: warning: unused value: $][4 [-Wmidrule-values] + k: INT | INT INT { $$; } { $$ = $3; } { }; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ]]])) + ]) ## --------------- ## ## Unused values. ## @@@ -464,9 -419,9 +531,9 @@@ tagged: { } ]]) AT_BISON_CHECK([input.y], [0], [], -[[input.y:6.8-45: warning: unset value: $$ -input.y:6.12-14: warning: unused value: $2 -input.y:7.6-8: warning: unset value: $$ +[[input.y:6.8-45: warning: unset value: $$ [-Wother] - input.y:6.8-45: warning: unused value: $2 [-Wother] ++input.y:6.12-14: warning: unused value: $2 [-Wother] +input.y:7.6-8: warning: unset value: $$ [-Wother] ]]) AT_DATA([[input.y]], @@@ -481,8 -436,8 +548,8 @@@ tagged: { } ]]) AT_BISON_CHECK([input.y], [0], [], - [[input.y:6.8-45: warning: unused value: $4 [-Wother] -[[input.y:6.23-28: warning: unused value: $4 -input.y:8.9-11: warning: unset value: $$ ++[[input.y:6.23-28: warning: unused value: $4 [-Wother] +input.y:8.9-11: warning: unset value: $$ [-Wother] ]]) AT_CLEANUP @@@ -505,9 -460,9 +572,9 @@@ end: { } ]]) AT_BISON_CHECK([input.y], [0], [], -[[input.y:6.8-22: warning: unset value: $$ -input.y:6.12-14: warning: unused value: $2 -input.y:7.6-8: warning: unset value: $$ +[[input.y:6.8-22: warning: unset value: $$ [-Wother] - input.y:6.8-22: warning: unused value: $2 [-Wother] ++input.y:6.12-14: warning: unused value: $2 [-Wother] +input.y:7.6-8: warning: unset value: $$ [-Wother] ]]) AT_CLEANUP