* Noteworthy changes in release ?.? (????-??-??) [?]
- ** New format for error reports: carets
+** 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: <foo> != <bar> [-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 <type1> term
+ %type <type2> nterm
+ %printer {} <type1> <type3>
+ %destructor {} <type2> <type4>
+ %%
+ nterm: term { $$ = $1; };
+
+ 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
+
+*** 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 <type> symbol3
+ %%
+ exp: "a";
+
+*** Useless destructors or printers
+
+ Bison now warns about useless destructors or printers. In the following
+ example, the printer for <type1>, and the destructor for <type2> are
+ useless: all symbols of <type1> (token1) already have a printer, and all
+ symbols of type <type2> (token2) already have a destructor.
+
+ %token <type1> token1
+ <type2> token2
+ <type3> token3
+ <type4> token4
+ %printer {} token1 <type1> <type3>
+ %destructor {} token2 <type2> <type4>
+
+*** 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.
+
+ ** 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': <t3> != <t2>
- 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 <sval> exp
+ ^^^^^^
+ input.y:1.7-12: previous declaration
+ %type <ival> exp
+ ^^^^^^
- foo.y:5.10-25: result type clash on merge function 'merge': <t3> != <t2>
- 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)
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$$) \
)
[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
Grammar}.
@end deffn
- @deffn {Construct} /*@dots{}*/
- Comment delimiters, as in C.
+@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{} */
+ @deffnx {Construct} // @dots{}
+ Comments, as in C/C++.
@end deffn
@deffn {Delimiter} :
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include <limits.h>
- 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)
/* 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: $$"));
}
}
}
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])
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
_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 { $<integer>2; } INT { $<integer>4; };
+ ^^^^^^^
-input.y:13.26-41: warning: unset value: $][$
++input.y:13.26-41: warning: unset value: $][$ [-Wmidrule-values]
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>4; };
+ ^^^^^^^^^^^^^^^^
-]]])[[input.y:13.10-62: warning: unset value: $][$
++]]])[[input.y:13.10-62: warning: unset value: $][$ [-Wother]
+ c: INT | INT { $][1; } INT { $<integer>2; } INT { $<integer>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 { $<integer>2; } INT { $<integer>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 { $<integer>2; } INT { $<integer>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 { $<integer>2; };
+ ^^^
-]]])[[input.y:14.10-49: warning: unset value: $][$
++]]])[[input.y:14.10-49: warning: unset value: $][$ [-Wother]
+ d: INT | INT { } INT { $][1; } INT { $<integer>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 { $<integer>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 { $<integer>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 { $<integer>$; } INT { $<integer>$; } INT { };
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-input.y:17.10-12: warning: unused value: $][1
++input.y:17.10-12: warning: unused value: $][1 [-Wother]
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } 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 { $<integer>$; } INT { $<integer>$; } INT { };
+ ^^^^^^^^^^^^^^^^
-]]])[[input.y:17.31-33: warning: unused value: $][3
++]]])[[input.y:17.31-33: warning: unused value: $][3 [-Wother]
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } 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 { $<integer>$; } INT { $<integer>$; } INT { };
+ ^^^^^^^^^^^^^^^^
-]]])[[input.y:17.52-54: warning: unused value: $][5
++]]])[[input.y:17.52-54: warning: unused value: $][5 [-Wother]
+ g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
+ ^^^
-input.y:18.10-72: warning: unset value: $][$
++input.y:18.10-72: warning: unset value: $][$ [-Wother]
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-input.y:18.10-12: warning: unused value: $][1
++input.y:18.10-12: warning: unused value: $][1 [-Wother]
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+ ^^^
-input.y:18.31-33: warning: unused value: $][3
++input.y:18.31-33: warning: unused value: $][3 [-Wother]
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>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 { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-]]])[[input.y:18.66-68: warning: unused value: $][5
++]]])[[input.y:18.66-68: warning: unused value: $][5 [-Wother]
+ h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>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 { $<integer>$ = 1; } { $][$ = $][1 + $][2; };
+ ^^^^^^^^^^^^^^^^^^^^
-]]])[[input.y:21.10-68: warning: unset value: $][$
++]]])[[input.y:21.10-68: warning: unset value: $][$ [-Wother]
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-input.y:21.10-12: warning: unused value: $][1
++input.y:21.10-12: warning: unused value: $][1 [-Wother]
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+ ^^^
-input.y:21.14-16: warning: unused value: $][2
++input.y:21.14-16: warning: unused value: $][2 [-Wother]
+ k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>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 { $<integer>$; } { $<integer>$ = $<integer>3; } { };
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ ]]]))
+ ])
## --------------- ##
## Unused values. ##
]])
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]],
]])
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
]])
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