+2007-12-22 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Automate regression testing of the XML/XSLT implementation. Discussed
+ starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-11/msg00021.html>.
+ * configure.ac (XSLTPROC): New substitution.
+ * Makefile.am (maintainer-xml-check): New phony target invoking...
+ * tests/Makefile.am (maintainer-xml-check): ... this new phony target
+ invoking make maintainer-check with BISON_TEST_XML=1.
+ * tests/atlocal.in (XSLTPROC): New.
+ * tests/local.at (AT_BISON_CHECK): New macro to (1) instruct Valgrind
+ not to report reachable memory when Bison is expected to have a
+ non-zero exit status and (2) to compare XML/XSLT output with --graph
+ and --report=all output for every working grammar when
+ BISON_TEST_XML=1.
+ (AT_BISON_CHECK_NO_XML): Likewise, but skip XML checks.
+ (AT_BISON_CHECK_XML): New.
+ (AT_QUELL_VALGRIND): New.
+ * tests/testsuite.at (ORIGINAL_AT_CHECK): Remove this and...
+ (AT_CHECK): ... don't redefine this since this was the old way to
+ quell Valgrind.
+ * tests/actions.at: Rewrite all AT_CHECK invocations for bison as
+ AT_BISON_CHECK invocations.
+ * tests/c++.at: Likewise.
+ * tests/calc.at: Likewise.
+ * tests/conflicts.at: Likewise.
+ * tests/cxx-type.at: Likewise.
+ * tests/existing.at: Likewise.
+ * tests/glr-regression.at: Likewise.
+ * tests/headers.at: Likewise.
+ * tests/input.at: Likewise.
+ * tests/java.at: Likewise.
+ * tests/output.at: Likewise.
+ * tests/push.at: Likewise.
+ * tests/reduce.at: Likewise.
+ * tests/regression.at: Likewise.
+ * tests/sets.at: Likewise.
+ * tests/skeletons.at: Likewise.
+ * tests/synclines.at: Likewise.
+ * tests/torture.at: Likewise.
+ (Big triangle): Use AT_BISON_CHECK_NO_XML instead since this grammar
+ tends to hang xsltproc.
+ (Big horizontal): Likewise.
+
2007-12-08 Joel E. Denny <jdenny@ces.clemson.edu>
In XML output, remove redundant class attribute on symbol element.
.PHONY: maintainer-push-check
maintainer-push-check:
cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
+
+.PHONY: maintainer-xml-check
+maintainer-xml-check:
+ cd tests && $(MAKE) $(AM_MAKEFLAGS) $@
fi
AC_DEFINE_UNQUOTED([M4], ["$M4"], [Define to the GNU M4 executable name.])
AM_MISSING_PROG([HELP2MAN], [help2man])
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+AC_SUBST([XSLTPROC])
# Checks for header files.
AC_CHECK_HEADERS_ONCE([locale.h])
.PHONY: maintainer-push-check
maintainer-push-check:
BISON_USE_PUSH_FOR_PULL=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
+
+.PHONY: maintainer-xml-check
+maintainer-xml-check:
+ BISON_TEST_XML=1 $(MAKE) $(AM_MAKEFLAGS) maintainer-check
}
]])
-AT_CHECK([bison -d -v -o input.c input.y])
+AT_BISON_CHECK([-d -v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[0123456789
}
]])
-AT_CHECK([bison -d -v -o input.c input.y], 0)
+AT_BISON_CHECK([-d -v -o input.c input.y], 0)
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[15
]])
AT_LALR1_CC_IF(
- [AT_CHECK([bison -o input.cc input.y])
+ [AT_BISON_CHECK([-o input.cc input.y])
AT_COMPILE_CXX([input])],
- [AT_CHECK([bison -o input.c input.y])
+ [AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])])
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 1,
[[<> destructor for 'd' @ 4.
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 1,
[[<*>/<field2>/e destructor.
}
]])
-AT_CHECK([bison -o input$1.c input$1.y])
+AT_BISON_CHECK([-o input$1.c input$1.y])
AT_COMPILE([input$1])
AT_PARSER_CHECK([./input$1], 0,
[[<]]kind[[> for 'E' @ 1.
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], [1], [],
[[Starting parse
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_CLEANUP
}
]])
-AT_CHECK([bison -o input.c input.y], 0,,
+AT_BISON_CHECK([-o input.c input.y], 0,,
[[input.y:33.3-23: warning: unset value: $$
input.y:30.3-35.37: warning: unused value: $3
]])
}
]])
-AT_CHECK([[bison -o input.c input.y]])
+AT_BISON_CHECK([[-o input.c input.y]])
AT_COMPILE([[input]])
AT_CLEANUP])
# Empty if no Java VM was found
CONF_JAVA='@CONF_JAVA@'
+
+# Empty if no xsltproc was found
+XSLTPROC='@XSLTPROC@'
}
]])
-AT_CHECK([bison -o input.cc input.yy], 0)
+AT_BISON_CHECK([-o input.cc input.yy], 0)
AT_DATA([Doxyfile],
[# The PROJECT_NAME tag is a single word (or a sequence of words
}
]])
-AT_CHECK([[bison -o input.cc input.y]])
+AT_BISON_CHECK([[-o input.cc input.y]])
m4_if([$#], [1],
[AT_COMPILE_CXX([[input]], [[input.cc]])
AT_DATA_CALC_Y([$1])
AT_SKEL_CC_IF(
- [AT_CHECK([bison -o calc.cc calc.y])
+ [AT_BISON_CHECK([-o calc.cc calc.y])
AT_COMPILE_CXX([calc])],
- [AT_CHECK([bison -o calc.c calc.y])
+ [AT_BISON_CHECK([-o calc.c calc.y])
AT_COMPILE([calc])])
# Test the priorities.
e: 'e' | /* Nothing. */;
]])
-AT_CHECK([bison -o input.c input.y], 0, [],
+AT_BISON_CHECK([-o input.c input.y], 0, [],
[[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */
]])
]])
# Specify the output files to avoid problems on different file systems.
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input '0<0'])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
[input.y: conflicts: 1 shift/reduce
])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c --report=all input.y])
+AT_BISON_CHECK([-o input.c --report=all input.y])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
%%
]])
-AT_CHECK([bison -o input.c --report=all input.y], 0, [],
+AT_BISON_CHECK([-o input.c --report=all input.y], 0, [],
[[input.y: conflicts: 1 reduce/reduce
input.y:4.6-8: warning: rule useless in parser due to conflicts: id: '0'
]])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 shift/reduce
input.y: expected 0 shift/reduce conflicts
])
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
exp: exp OP exp | NUM;
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 shift/reduce
input.y: expected 2 shift/reduce conflicts
])
a: 'a';
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[input.y: conflicts: 1 reduce/reduce
input.y: expected 0 reduce/reduce conflicts
])
;
]])
-AT_CHECK([bison -o input.c input.y], 0, [],
+AT_BISON_CHECK([-o input.c input.y], 0, [],
[[input.y: conflicts: 4 shift/reduce
]])
AT_CLEANUP
;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
]])
-AT_CHECK([[bison --report=all input.y]], 0, [],
+AT_BISON_CHECK([[--report=all input.y]], 0, [],
[[input.y: conflicts: 1 shift/reduce, 1 reduce/reduce
input.y:12.5-20: warning: rule useless in parser due to conflicts: resolved_conflict: 'a' unreachable1
input.y:20.5-20: warning: rule useless in parser due to conflicts: unreachable1: 'a' unreachable2
]])
AT_CHECK([[cat input.y >> input-keep.y]])
-AT_CHECK([[bison input-keep.y]], 0, [],
+AT_BISON_CHECK([[input-keep.y]], 0, [],
[[input-keep.y: conflicts: 2 shift/reduce, 2 reduce/reduce
input-keep.y:22.4: warning: rule useless in parser due to conflicts: unreachable1: /* empty */
input-keep.y:26.16: warning: rule useless in parser due to conflicts: unreachable2: /* empty */
empty_c2: %prec 'c' ;
empty_c3: %prec 'd' ;
]])
-AT_CHECK([[bison --report=all -o input.c input.y]], 0, [], [ignore])
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
AT_CHECK([[cat input.output | sed -n '/^state 0$/,/^state 1$/p']], 0,
[[state 0
empty_c3: %prec 'c' ;
]])
-AT_CHECK([[bison --report=all -o input.c input.y]], 0, [], [ignore])
+AT_BISON_CHECK([[--report=all -o input.c input.y]], 0, [], [ignore])
AT_CHECK([[cat input.output | sed -n '/^state 0$/,/^state 1$/p']], 0,
[[state 0
This is total garbage, but it should be ignored.
]])
-AT_CHECK([bison -o types.c types.y], 0, [], ignore)
+AT_BISON_CHECK([-o types.c types.y], 0, [], ignore)
AT_COMPILE([types])
AT_BISON_OPTION_POPDEFS
])
# Pass plenty of options, to exercise plenty of code, even if we
# don't actually check the output. But SEGV is watching us, and
# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]])
+AT_BISON_CHECK([[--verbose --defines input.y]])
AT_CLEANUP
# Pass plenty of options, to exercise plenty of code, even if we
# don't actually check the output. But SEGV is watching us, and
# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]], 0, [],
+AT_BISON_CHECK([[--verbose --defines input.y]], 0, [],
[[input.y: conflicts: 78 shift/reduce, 10 reduce/reduce
]])
# Pass plenty of options, to exercise plenty of code, even if we
# don't actually check the output. But SEGV is watching us, and
# so might do dmalloc.
-AT_CHECK([[bison --verbose --defines input.y]], 0, [],
+AT_BISON_CHECK([[--verbose --defines input.y]], 0, [],
[[input.y:453.11-48: warning: rule useless in parser due to conflicts: path: ORDINAL LAST object_type relative_path
]])
}
]])
-AT_CHECK([[bison -o glr-regr1.c glr-regr1.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr1.c glr-regr1.y]], 0, [],
[glr-regr1.y: conflicts: 1 shift/reduce
])
AT_COMPILE([glr-regr1])
}
]])
-AT_CHECK([[bison -o glr-regr2a.c glr-regr2a.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr2a.c glr-regr2a.y]], 0, [],
[glr-regr2a.y: conflicts: 2 shift/reduce
])
AT_COMPILE([glr-regr2a])
}
]])
-AT_CHECK([[bison -o glr-regr3.c glr-regr3.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr3.c glr-regr3.y]], 0, [],
[glr-regr3.y: conflicts: 1 shift/reduce, 1 reduce/reduce
])
AT_COMPILE([glr-regr3])
}
]])
-AT_CHECK([[bison -o glr-regr4.c glr-regr4.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr4.c glr-regr4.y]], 0, [],
[glr-regr4.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr4])
}
]])
-AT_CHECK([[bison -o glr-regr5.c glr-regr5.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr5.c glr-regr5.y]], 0, [],
[glr-regr5.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr5])
}
]])
-AT_CHECK([[bison -o glr-regr6.c glr-regr6.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr6.c glr-regr6.y]], 0, [],
[glr-regr6.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr6])
}
]])
-AT_CHECK([[bison -o glr-regr7.c glr-regr7.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr7.c glr-regr7.y]], 0, [],
[glr-regr7.y: conflicts: 2 reduce/reduce
])
AT_COMPILE([glr-regr7])
}
]])
-AT_CHECK([[bison -o glr-regr8.c glr-regr8.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr8.c glr-regr8.y]], 0, [],
[glr-regr8.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr8])
}
]])
-AT_CHECK([[bison -o glr-regr9.c glr-regr9.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr9.c glr-regr9.y]], 0, [],
[glr-regr9.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr9])
}
]])
-AT_CHECK([[bison -o glr-regr10.c glr-regr10.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr10.c glr-regr10.y]], 0, [],
[glr-regr10.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr10])
}
]])
-AT_CHECK([[bison -o glr-regr11.c glr-regr11.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr11.c glr-regr11.y]], 0, [],
[glr-regr11.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr11])
}
]])
-AT_CHECK([[bison -o glr-regr12.c glr-regr12.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr12.c glr-regr12.y]], 0, [],
[glr-regr12.y: conflicts: 1 shift/reduce, 1 reduce/reduce
])
AT_COMPILE([glr-regr12])
}
]])
-AT_CHECK([[bison -o glr-regr13.c glr-regr13.y]], 0, [], [])
+AT_BISON_CHECK([[-o glr-regr13.c glr-regr13.y]], 0, [], [])
AT_COMPILE([glr-regr13])
AT_PARSER_CHECK([[./glr-regr13]], 0,
}
]])
-AT_CHECK([[bison -o glr-regr14.c glr-regr14.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr14.c glr-regr14.y]], 0, [],
[glr-regr14.y: conflicts: 3 reduce/reduce
])
AT_COMPILE([glr-regr14])
}
]])
-AT_CHECK([[bison -o glr-regr15.c glr-regr15.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr15.c glr-regr15.y]], 0, [],
[glr-regr15.y: conflicts: 2 reduce/reduce
])
AT_COMPILE([glr-regr15])
}
]])
-AT_CHECK([[bison -o glr-regr16.c glr-regr16.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr16.c glr-regr16.y]], 0, [],
[glr-regr16.y: conflicts: 1 reduce/reduce
])
AT_COMPILE([glr-regr16])
}
]])
-AT_CHECK([[bison -o glr-regr17.c glr-regr17.y]], 0, [],
+AT_BISON_CHECK([[-o glr-regr17.c glr-regr17.y]], 0, [],
[glr-regr17.y: conflicts: 3 reduce/reduce
])
AT_COMPILE([glr-regr17])
}
]])
-AT_CHECK([[bison -o glr-regr18.c glr-regr18.y]], 1, [],
+AT_BISON_CHECK([[-o glr-regr18.c glr-regr18.y]], 1, [],
[glr-regr18.y:26.18-24: result type clash on merge function `merge': <type2> != <type1>
glr-regr18.y:25.18-24: previous declaration
glr-regr18.y:27.13-19: result type clash on merge function `merge': <type3> != <type2>
# Bison Parser Headers. -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2006, 2007 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
exp: {};
])
-AT_CHECK([bison --defines input.y])
+AT_BISON_CHECK([--defines input.y])
AT_CLEANUP
#include <$1.h>
])
-AT_CHECK([bison --defines=$1.h --output=y.tab.c $1.y])
+AT_BISON_CHECK([--defines=$1.h --output=y.tab.c $1.y])
AT_COMPILE([y.tab.o], [-I. -c y.tab.c])
exp:;
])
-AT_CHECK([bison --defines -o input.c input.y])
+AT_BISON_CHECK([--defines -o input.c input.y])
# YYLTYPE should be defined, and MY_LLOC declared.
AT_DATA([caller.c],
exp: { @$ = @1 ; };
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:2.13-14: integer out of range: `$1'
input.y:3.13-14: integer out of range: `@1'
]])
;
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:5.12-13: $$ for the midrule at $2 of `exp' has no declared type
input.y:5.24-25: $2 of `exp' has no declared type
input.y:5.6-32: warning: type clash on default action: <bar> != <>
_AT_UNUSED_VALUES_DECLARATIONS])
)
-AT_CHECK([bison]m4_ifval($2, [ --warnings=midrule-values ])[ input.y], [0], [],
+AT_BISON_CHECK(m4_ifval($2, [ --warnings=midrule-values ])[ input.y], [0], [],
[[input.y:11.10-32: warning: unset value: $]$[
input.y:11.10-32: warning: unused value: $]1[
input.y:11.10-32: warning: unused value: $]3[
%printer { destroy ($$); } <>;
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:1.13-29: redeclaration for default tagged %destructor
input.y:1.13-29: previous declaration
input.y:2.10-26: redeclaration for default tagged %printer
%printer { destroy ($$); } <field2> <field1>;
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:4.13-29: %destructor redeclaration for <field1>
input.y:1.13-29: previous declaration
input.y:4.13-29: %destructor redeclaration for <field1>
tagged: { } ;
]])
-AT_CHECK([bison input.y], [0], [],
+AT_BISON_CHECK([input.y], [0], [],
[[input.y:6.8-45: warning: unset value: $$
input.y:6.8-45: warning: unused value: $2
input.y:7.6-8: warning: unset value: $$
tagged: { } ;
]])
-AT_CHECK([bison input.y], [0], [],
+AT_BISON_CHECK([input.y], [0], [],
[[input.y:6.8-45: warning: unused value: $4
input.y:8.9-11: warning: unset value: $$
]])
end: { } ;
]])
-AT_CHECK([bison input.y], [0], [],
+AT_BISON_CHECK([input.y], [0], [],
[[input.y:6.8-22: warning: unset value: $$
input.y:6.8-22: warning: unused value: $2
input.y:7.6-8: warning: unset value: $$
exp: foo;
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:8.7-11: %type redeclaration for foo
input.y:3.7-11: previous declaration
input.y:10.13-17: %destructor redeclaration for foo
AT_DATA([input.y], [])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:1.1: syntax error, unexpected end of file
]])
AT_DATA([input.y],
[{}
])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:1.1-2: syntax error, unexpected {...}
]])
}
]])
-AT_CHECK([bison -d -v -o input.c input.y])
+AT_BISON_CHECK([-d -v -o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_COMPILE([main.o], [-c main.c])
AT_COMPILE([input], [input.o main.o])
%%
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
%%
empty_file:;
]])
-AT_CHECK([bison -o input.c input.y], $2, [], ignore)
+AT_BISON_CHECK([-o input.c input.y], $2, [], ignore)
AT_CLEANUP
])
%%
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
%destructor { free ($$)
]])
-AT_CHECK([bison -o input.c input.y], 1, [],
+AT_BISON_CHECK([-o input.c input.y], 1, [],
[[input.y:1.10-2.0: missing `"' at end of line
input.y:4.10-5.0: missing `'' at end of line
input.y:14.11-15.0: missing `'' at end of line
%start start;
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
PREC: ;
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:3.1-4: rule given for PREC, which is a token
]])
%%
start: ;
]])
-AT_CHECK([[bison input-c.y]], [0], [],
+AT_BISON_CHECK([[input-c.y]], [0], [],
[[input-c.y:1.7: warning: %code qualifier `q' is not used
input-c.y:2.7-9: warning: %code qualifier `bad' is not used
input-c.y:3.7-9: warning: %code qualifier `bad' is not used
%%
start: ;
]])
-AT_CHECK([[bison input-c-glr.y]], [0], [],
+AT_BISON_CHECK([[input-c-glr.y]], [0], [],
[[input-c-glr.y:1.7: warning: %code qualifier `q' is not used
input-c-glr.y:2.7-9: warning: %code qualifier `bad' is not used
input-c-glr.y:3.8-10: warning: %code qualifier `bad' is not used
%%
start: ;
]])
-AT_CHECK([[bison input-c++.y]], [0], [],
+AT_BISON_CHECK([[input-c++.y]], [0], [],
[[input-c++.y:1.7: warning: %code qualifier `q' is not used
input-c++.y:2.7-9: warning: %code qualifier `bad' is not used
input-c++.y:3.8: warning: %code qualifier `q' is not used
%%
start: ;
]])
-AT_CHECK([[bison input-c++-glr.y]], [0], [],
+AT_BISON_CHECK([[input-c++-glr.y]], [0], [],
[[input-c++-glr.y:1.7-9: warning: %code qualifier `bad' is not used
input-c++-glr.y:2.7: warning: %code qualifier `q' is not used
input-c++-glr.y:3.7: warning: %code qualifier `q' is not used
%%
start: ;
]])
-AT_CHECK([[bison special-char-@@.y]], [0], [],
+AT_BISON_CHECK([[special-char-@@.y]], [0], [],
[[special-char-@@.y:1.7-9: warning: %code qualifier `bad' is not used
special-char-@@.y:2.7: warning: %code qualifier `q' is not used
special-char-@@.y:3.7: warning: %code qualifier `q' is not used
%%
start: ;
]])
-AT_CHECK([[bison special-char-@:>@.y]], [0], [],
+AT_BISON_CHECK([[special-char-@:>@.y]], [0], [],
[[special-char-@:>@.y:1.7-9: warning: %code qualifier `bad' is not used
special-char-@:>@.y:2.7: warning: %code qualifier `q' is not used
special-char-@:>@.y:3.7: warning: %code qualifier `q' is not used
start: ;
]])
-AT_CHECK([[bison input.y]], [0], [],
+AT_BISON_CHECK([[input.y]], [0], [],
[[input.y:2.9-11: warning: %define variable `var' redefined
input.y:1.9-11: warning: previous definition
input.y:3.10-12: warning: %define variable `var' redefined
start: ;
]])
-AT_CHECK([[bison Input.y]], [1], [],
+AT_BISON_CHECK([[Input.y]], [1], [],
[[Input.y:2.9-14: invalid value for %define Boolean variable `public'
]])
start: ;
]])
-AT_CHECK([[bison input.y]], [1], [],
+AT_BISON_CHECK([[input.y]], [1], [],
[[input.y:1.9-21: invalid value for %define variable `api.push_pull': `neither'
]])
start: ;
]])
-AT_CHECK([[bison input.y]], [0], [],
+AT_BISON_CHECK([[input.y]], [0], [],
[[input.y:1.9-16: warning: %define variable `api.pure' is not used
]])
])
start: ;
]])
-AT_CHECK([[bison input.y]], [1], [],
+AT_BISON_CHECK([[input.y]], [1], [],
[m4_foreach([b4_arg], m4_dquote(m4_shift($@)),
[[input.y:3.9-17: ]b4_arg[
]])])
$2
}])
-AT_CHECK([bison -o Calc.java Calc.y])
+AT_BISON_CHECK([-o Calc.java Calc.y])
AT_JAVA_COMPILE([Calc.java])
# Test the priorities.
$2])
])
+# AT_BISON_CHECK(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# -------------------------------------------------
+# Check Bison by invoking `bison BISON_ARGS'. OTHER_AT_CHECK_ARGS are the
+# usual remaining arguments to AT_CHECK: STATUS, STDOUT, etc.
+#
+# This macro or AT_BISON_CHECK_NO_XML should always be used whenever invoking
+# Bison in the test suite. For now it ensures that:
+#
+# 1. Valgrind doesn't report reachable memory when Bison is expected to have
+# a non-zero exit status since Bison doesn't always try to free all memory
+# in that case.
+#
+# 2. In the case of maintainer-xml-check, XML/XSLT output is compared with
+# --graph and --report=all output for every working grammar.
+m4_define([AT_BISON_CHECK],
+[m4_if(m4_quote($2), [0], [AT_BISON_CHECK_XML($@)],
+ m4_quote($2), [], [AT_BISON_CHECK_XML($@)])
+AT_BISON_CHECK_NO_XML($@)])
+
+# AT_BISON_CHECK_NO_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# --------------------------------------------------------
+# Same as AT_BISON_CHECK except don't perform XML/XSLT checks. This is useful
+# when a tortured grammar's XML is known to be too large for xsltproc to
+# handle.
+m4_define([AT_BISON_CHECK_NO_XML],
+[AT_CHECK(m4_if(m4_quote($2), [0], [], m4_quote($2), [], [],
+ [AT_QUELL_VALGRIND ])[[bison ]]$@)])
+
+# AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
+# -----------------------------------------------------
+# Run AT_BISON_CHECK's XML/XSLT checks if $BISON_TEST_XML=1 and $XSLTPROC is
+# defined. It doesn't make sense to invoke this macro if Bison is expected to
+# have a non-zero exit status.
+m4_define([AT_BISON_CHECK_XML],
+[[if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then]
+ mkdir xml-tests
+ m4_pushdef([AT_BISON_ARGS],
+ [m4_bpatsubsts([[$1]],
+ [--report(-file)?=[^][ ]*], [],
+ [--graph=[^][ ]*], [],
+ [--xml=[^][ ]*], [])])dnl
+ # Don't combine these Bison invocations since we want to be sure that
+ # --report=all isn't required to get the full XML file.
+ AT_CHECK([[bison --report=all --report-file=xml-tests/test.output \
+ --graph=xml-tests/test.dot ]]AT_BISON_ARGS,
+ [[0]], [ignore], [ignore])
+ AT_CHECK([[bison --xml=xml-tests/test.xml ]]AT_BISON_ARGS,
+ [[0]], [ignore], [ignore])
+ m4_popdef([AT_BISON_ARGS])dnl
+ cp xml-tests/test.output expout
+ AT_CHECK([[$XSLTPROC \
+ `]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2text.xsl \
+ xml-tests/test.xml]], [[0]], [expout])
+ cp xml-tests/test.dot expout
+ AT_CHECK([[$XSLTPROC \
+ `]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2dot.xsl \
+ xml-tests/test.xml]], [[0]], [expout])
+ rm -rf xml-tests expout
+[fi]])
+
+# AT_QUELL_VALGRIND
+# -----------------
+# Put this before a Bison invocation to keep Valgrind from complaining about
+# reachable memory.
+#
+# Do not quote invocations of this macro within the first argument of AT_CHECK.
+# The triple quoting below will cause test cases to fail if you do. If you do
+# so anyway but also decrease the quoting below to avoid that problem, AT_CHECK
+# will then fail to shell-escape its contents when attempting to print them.
+# The testsuite verbose output, at least, will be incorrect, but nothing may
+# fail to make sure you notice.
+m4_define([AT_QUELL_VALGRIND],
+[[[VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS;]]])
## ------------------------ ##
## Compiling C, C++ Files. ##
foo: {};
]])
-AT_CHECK([bison $3 $1 $5], 0)
+AT_BISON_CHECK([$3 $1 $5], 0)
AT_CHECK([ls $4], [], [ignore])
$6
AT_CLEANUP
foo: {};
]])
-AT_CHECK([bison $3 $1], 0, [], [$4])
+AT_BISON_CHECK([$3 $1], 0, [], [$4])
AT_CLEANUP
])
%%
start: {};
]])
-AT_CHECK([bison -o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" glr.y])
+AT_BISON_CHECK([-o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" glr.y])
AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
AT_COMPILE([glr.o], [-c "AS_ESCAPE([$1.c])"])
$2
%%
start: {};
]])
-AT_CHECK([bison -o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" cxx.y])
+AT_BISON_CHECK([-o "AS_ESCAPE([$1.c])" --defines="AS_ESCAPE([$1.h])" cxx.y])
AT_CHECK([ls "AS_ESCAPE([$1.c])" "AS_ESCAPE([$1.h])"], [], [ignore])
AT_COMPILE_CXX([cxx.o], [-c "AS_ESCAPE([$1.c])"])
$2
}
]])
-AT_CHECK([[bison -o input.c input.y]])
+AT_BISON_CHECK([[-o input.c input.y]])
AT_COMPILE([[input]])
AT_PARSER_CHECK([[./input]])
}
]])
-AT_CHECK([[bison -o input.c input.y]])
+AT_BISON_CHECK([[-o input.c input.y]])
AT_COMPILE([[input]])
AT_PARSER_CHECK([[./input]], 0, [],
[[cannot allocate multiple impure push-parser instances
start: ;
]])
-AT_CHECK([[bison input.y]], [0], [],
+AT_BISON_CHECK([[input.y]], [0], [],
[[input.y:2.9-21: warning: %define variable `api.push_pull' is not used
]])
exp: useful;
]])
-AT_CHECK([[bison input.y]])
+AT_BISON_CHECK([[input.y]])
AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0,
[[Terminals unused in grammar
exp: useful;
]])
-AT_CHECK([[bison input.y]], 0, [],
+AT_BISON_CHECK([[input.y]], 0, [],
[[input.y: warning: 9 nonterminals useless in grammar
input.y:4.8-15: warning: nonterminal useless in grammar: useless1
input.y:5.8-15: warning: nonterminal useless in grammar: useless2
useless9: '9';
]])
-AT_CHECK([[bison input.y]], 0, [],
+AT_BISON_CHECK([[input.y]], 0, [],
[[input.y: warning: 9 nonterminals and 9 rules useless in grammar
input.y:6.1-8: warning: nonterminal useless in grammar: useless1
input.y:7.1-8: warning: nonterminal useless in grammar: useless2
%%
]])
-AT_CHECK([[bison not-reduced.y]], 0, [],
+AT_BISON_CHECK([[not-reduced.y]], 0, [],
[[not-reduced.y: warning: 2 nonterminals and 3 rules useless in grammar
not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable
not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive
%%
]])
-AT_CHECK([[bison reduced.y]])
+AT_BISON_CHECK([[reduced.y]])
# Comparing the parsers.
cp reduced.c expout
indirection: underivable;
]])
-AT_CHECK([[bison input.y]], 0, [],
+AT_BISON_CHECK([[input.y]], 0, [],
[[input.y: warning: 2 nonterminals and 3 rules useless in grammar
input.y:5.15-25: warning: nonterminal useless in grammar: underivable
input.y:6.14-24: warning: nonterminal useless in grammar: indirection
exp: exp;
]])
-AT_CHECK([[bison input.y]], 1, [],
+AT_BISON_CHECK([[input.y]], 1, [],
[[input.y: warning: 2 nonterminals and 2 rules useless in grammar
input.y:3.1-3: fatal error: start symbol exp does not derive any sentence
]])
# Bison Regressions. -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
# Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
program: 'x';
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_COMPILE([input.o], [-DYYDEBUG -c input.c])
program: { $$ = ""; };
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
%%
]])
-AT_CHECK([bison -y -o input.c input.y])
+AT_BISON_CHECK([-y -o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
%%
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
%%
]])
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
AT_CHECK([grep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore])
%%
]])
-AT_CHECK([bison -v -o input.c input.y], 0, [],
+AT_BISON_CHECK([-v -o input.c input.y], 0, [],
[[input.y:6.8-14: warning: symbol `"<="' used more than once as a literal string
]])
};
]])
-AT_CHECK([bison -o input.c -v input.y])
+AT_BISON_CHECK([-o input.c -v input.y])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
%%
]])
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
AT_CLEANUP
%{
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:2.1: invalid character: `?'
input.y:3.14: invalid character: `}'
input.y:4.1: invalid character: `%'
%union
]])
-AT_CHECK([bison input.y], [1], [],
+AT_BISON_CHECK([input.y], [1], [],
[[input.y:3.1-15: syntax error, unexpected %initial-action, expecting {...}
]])
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
AT_DATA([experr],
[[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201?\?!", expecting a
]])
# Pacify font-lock-mode: "
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
AT_CLEANUP
%%
]])
-AT_CHECK([bison -v input.y])
+AT_BISON_CHECK([-v input.y])
AT_CHECK([cat input.output], 0,
[[Grammar
%%
]])
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
# Check only the tables.
[sed -n 's/ *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c]
[AT_SETUP([Dancer $1])
AT_BISON_OPTION_PUSHDEFS([$1])
_AT_DATA_DANCER_Y([$1])
-AT_CHECK([bison -o dancer.c dancer.y])
+AT_BISON_CHECK([-o dancer.c dancer.y])
AT_LALR1_CC_IF(
- [AT_CHECK([bison -o dancer.cc dancer.y])
+ [AT_BISON_CHECK([-o dancer.cc dancer.y])
AT_COMPILE_CXX([dancer])],
- [AT_CHECK([bison -o dancer.c dancer.y])
+ [AT_BISON_CHECK([-o dancer.c dancer.y])
AT_COMPILE([dancer])])
AT_PARSER_CHECK([./dancer], 1, [],
[syntax error, unexpected ':'
[AT_SETUP([Expecting two tokens $1])
AT_BISON_OPTION_PUSHDEFS([$1])
_AT_DATA_EXPECT2_Y([$1])
-AT_CHECK([bison -o expect2.c expect2.y])
+AT_BISON_CHECK([-o expect2.c expect2.y])
AT_LALR1_CC_IF(
- [AT_CHECK([bison -o expect2.cc expect2.y])
+ [AT_BISON_CHECK([-o expect2.cc expect2.y])
AT_COMPILE_CXX([expect2])],
- [AT_CHECK([bison -o expect2.c expect2.y])
+ [AT_BISON_CHECK([-o expect2.c expect2.y])
AT_COMPILE([expect2])])
AT_PARSER_CHECK([./expect2], 1, [],
[syntax error, unexpected '+', expecting A or B
}
]])
-AT_CHECK([bison -t -o input.c input.y])
+AT_BISON_CHECK([-t -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input], 0,
[[Bison would once convert this action to a midrule because of the subsequent braced code.
%token 'a' "A";
]])
-AT_CHECK([bison -t -o input.c input.y])
+AT_BISON_CHECK([-t -o input.c input.y])
AT_CLEANUP
a: 'a' ;
]])
-AT_CHECK([[bison --report=all input.y]])
+AT_BISON_CHECK([[--report=all input.y]])
AT_CHECK([[sed -n '/^state 1$/,/^state 2$/p' input.output]], [[0]],
[[state 1
# Exercising Bison Grammar Sets. -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
e: 'e' | /* Nothing */;
]])
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
AT_EXTRACT_SETS([stderr], [sets])
AT_CHECK([[cat sets]], [],
[[DERIVES
h: 'h';
]])
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
AT_CHECK([[sed -n 's/[ ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
[[RTC: Firsts Output BEGIN
;
]])
-AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
AT_EXTRACT_SETS([stderr], [sets])
AT_CHECK([[cat sets]], [],
[[DERIVES
;
]])
-AT_CHECK([[bison -v -o input.c input.y]])
+AT_BISON_CHECK([[-v -o input.c input.y]])
# Get the final state in the parser.
AT_CHECK([[sed -n 's/.*define YYFINAL *\([0-9][0-9]*\)/final state \1/p' input.c]],
start: ;
]])
-AT_CHECK([[bison tmp/input-gram.y]])
+AT_BISON_CHECK([[tmp/input-gram.y]])
AT_CHECK([[cat input-gram.tab.c]], [[0]],
[[Hello World
]])
-AT_CHECK([[bison input-gram.y]])
+AT_BISON_CHECK([[input-gram.y]])
AT_CHECK([[cat input-gram.tab.c]], [[0]],
[[Hello World -- Local
]])
-AT_CHECK([[bison --skeleton=tmp/skel.c tmp/input-cmd-line.y]])
+AT_BISON_CHECK([[--skeleton=tmp/skel.c tmp/input-cmd-line.y]])
AT_CHECK([[cat input-cmd-line.tab.c]], [[0]],
[[Hello World
]])
[[%skeleton "yacc.c"]
AT_GRAM])
-AT_CHECK([[bison --skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y]])
+AT_BISON_CHECK([[--skeleton=yacc.c -o input-cmd-line.c input-cmd-line.y]])
AT_COMPILE([[input-cmd-line]])
AT_PARSER_CHECK([[./input-cmd-line]], [[1]], [],
[[syntax error, unexpected 'a', expecting $end
]])
-AT_CHECK([[bison -o input-gram.c input-gram.y]])
+AT_BISON_CHECK([[-o input-gram.c input-gram.y]])
AT_COMPILE([[input-gram]])
AT_PARSER_CHECK([[./input-gram]], [[1]], [],
[[syntax error, unexpected 'a', expecting $end
start: ;
]])
-AT_CHECK([[bison input.y]], [[1]], [[]],
+AT_BISON_CHECK([[input.y]], [[1]], [[]],
[[[Bison:b4_percent_define_default]:1.0: invalid value for %define Boolean variable `foo'
]])
start: ;
]])
-AT_CHECK([[bison input1.y]], [[1]], [[]],
+AT_BISON_CHECK([[input1.y]], [[1]], [[]],
[[input1.y: warning: foow fubar
foow.y:2.3-5.3: warning: foowat fubar
input1.y: fooc fubar
start: ;
]])
-AT_CHECK([[bison input2.y]], [[1]], [[]],
+AT_BISON_CHECK([[input2.y]], [[1]], [[]],
[[foof.y:12.11-100.122: fatal error: foofat fubar
]])
start: ;
]])
-AT_CHECK([[bison input3.y]], [[1]], [[]],
+AT_BISON_CHECK([[input3.y]], [[1]], [[]],
[[input3.y: fatal error: undefined %define variable `bogus' passed to b4_percent_define_get_loc
]])
start: ;
]])
-AT_CHECK([[bison input4.y]], [[1]], [[]],
+AT_BISON_CHECK([[input4.y]], [[1]], [[]],
[[input4.y: fatal error: undefined %define variable `bogus' passed to b4_percent_define_get_syncline
]])
start: ;
]])
-AT_CHECK([[bison input1.y]], [[1]], [[]],
+AT_BISON_CHECK([[input1.y]], [[1]], [[]],
[[input1.y: non-fatal error
input1.y: fatal error: M4 should exit immediately here
]])
start: ;
]])
-AT_CHECK([[bison input2.y]], [[1]], [[]],
+AT_BISON_CHECK([[input2.y]], [[1]], [[]],
[[input2.y: warning: morning
foo.y:1.5-6: fatal error: M4 should exit immediately here
]])
# Executing Actions. -*- Autotest -*-
-# Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
AT_DATA([[input.y]], [$2])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_SYNCLINES_COMPILE([input.c])
AT_CHECK([cat stdout], 0, [$3])
AT_CLEANUP
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Bison often leaks memory when its exit status is non-zero, so set
-# --leak-check=summary for Valgrind in that case.
-m4_pushdef([ORIGINAL_AT_CHECK], m4_defn([AT_CHECK]))
-m4_pushdef([AT_CHECK],
-[ORIGINAL_AT_CHECK(
- m4_if(m4_index(m4_quote($1), [bison ]), 0,
- m4_if(m4_quote($2), [0], [], m4_quote($2), [], [],
- [[VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS; ]]))$@)])
-
# Testing resistance to user bugs.
m4_include([input.at])
# Push parsing specific tests.
m4_include([push.at])
-
-m4_popdef([AT_CHECK])
-m4_popdef([ORIGINAL_AT_CHECK])
# With 500 and the new parser, which consume far too much memory,
# it gets killed too. Of course the parser is to be cleaned.
AT_DATA_TRIANGULAR_GRAMMAR([input.y], [200])
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
# Ask for 200 MiB, which should be plenty even on a 64-bit host.
AT_INCREASE_DATA_SIZE(204000)
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK_NO_XML([-v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
# Ask for 200 MiB, which should be plenty even on a 64-bit host.
AT_INCREASE_DATA_SIZE(204000)
-AT_CHECK([bison -v -o input.c input.y])
+AT_BISON_CHECK([-v -o input.c input.y])
AT_COMPILE([input])
AT_PARSER_CHECK([./input])
}
}
]])
-AT_CHECK([bison -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
])