mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
output: do not generate source files when early errors are caught
Reported by Alexandre Duret-Lutz as "second problem" in: http://lists.gnu.org/archive/html/bug-bison/2013-09/msg00015.html One problem is that some errors are caught early, before the generation of output files, while others can only be detected afterwards (since, for instance, skeletons can raise errors themselves). This will be addressed in two steps: early errors do not generate source files at all, while later errors will remove the files that have already been generated. * src/scan-skel.l (yyout): Open to /dev/null when there are errors. * tests/output.at (AT_CHECK_FILES): Factored out of... (AT_CHECK_OUTPUT): this. Fuse the "SHELLIO" argument in the "FLAGS" one. Use $5 to denote the expected exit status. Add a test case for early errors.
This commit is contained in:
@@ -17,12 +17,23 @@
|
||||
|
||||
AT_BANNER([[Output file names.]])
|
||||
|
||||
# AT_CHECK_FILES(EXPECTED-FILES, [IGNORED-FILES])
|
||||
# -----------------------------------------------
|
||||
# Check that the current directory contains FILE... (sorted).
|
||||
m4_define([AT_CHECK_FILES],
|
||||
[AT_CHECK([[find . -type f |
|
||||
$PERL -ne '
|
||||
s,\./,,; chomp;
|
||||
push @file, $_ unless m{^($2|testsuite.log)$};
|
||||
END { print join (" ", sort @file), "\n" }']],
|
||||
[], [$1
|
||||
])])
|
||||
|
||||
# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [SHELLIO],
|
||||
# AT_CHECK_OUTPUT(INPUT-FILE, [DIRECTIVES], [FLAGS], EXPECTED-FILES, [STATUS],
|
||||
# [ADDITIONAL-TESTS], [PRE-TESTS])
|
||||
# -----------------------------------------------------------------------------
|
||||
m4_define([AT_CHECK_OUTPUT],
|
||||
[AT_SETUP([[Output files: ]$2 $3 $5])[
|
||||
[AT_SETUP([[Output files: ]$2 $3])[
|
||||
]$7[
|
||||
for file in ]$1 $4[; do
|
||||
case $file in
|
||||
@@ -35,15 +46,9 @@ done
|
||||
foo: {};
|
||||
]])[
|
||||
|
||||
]AT_BISON_CHECK([$3 $1 $5], 0)[
|
||||
]AT_BISON_CHECK([$3 $1], [$5], [], [ignore])[
|
||||
# Ignore the files non-generated files
|
||||
]AT_CHECK([[find . -type f |
|
||||
$PERL -ne '
|
||||
s,\./,,; chomp;
|
||||
push @file, $_ unless m{^($1|testsuite.log)$};
|
||||
END { print join (" ", sort @file), "\n" }']],
|
||||
[], [$4
|
||||
])[
|
||||
]AT_CHECK_FILES([$4], [$1])[
|
||||
]$6[
|
||||
]AT_CLEANUP[
|
||||
]])
|
||||
@@ -54,9 +59,9 @@ AT_CHECK_OUTPUT([foo.y], [], [-dv],
|
||||
# Some versions of Valgrind (at least valgrind-3.6.0.SVN-Debian) report
|
||||
# "fgrep: write error: Bad file descriptor" when stdout is closed, so we
|
||||
# skip this test group during maintainer-check-valgrind.
|
||||
AT_CHECK_OUTPUT([foo.y], [], [-dv],
|
||||
AT_CHECK_OUTPUT([foo.y], [], [-dv >&-],
|
||||
[foo.output foo.tab.c foo.tab.h],
|
||||
[>&-], [],
|
||||
[], [],
|
||||
[AT_CHECK([[case "$PREBISON" in *valgrind*) exit 77;; esac]])])
|
||||
|
||||
AT_CHECK_OUTPUT([foo.y], [], [-dv -o foo.c],
|
||||
@@ -114,6 +119,12 @@ AT_CHECK_OUTPUT([foo.yy], [],
|
||||
[-o foo.c++ --graph=foo.gph],
|
||||
[foo.c++ foo.gph])
|
||||
|
||||
# Do not generate code when there are early errors (even warnings as
|
||||
# errors).
|
||||
AT_CHECK_OUTPUT([foo.y], [%type <foo> useless],
|
||||
[--defines --graph --xml --report=all -Wall -Werror],
|
||||
[foo.dot foo.output foo.xml],
|
||||
[1])
|
||||
|
||||
## ------------ ##
|
||||
## C++ output. ##
|
||||
|
||||
Reference in New Issue
Block a user