diff options
-rw-r--r-- | NEWS | 10 | ||||
-rw-r--r-- | src/scan-skel.l | 3 | ||||
-rw-r--r-- | tests/output.at | 35 |
3 files changed, 35 insertions, 13 deletions
@@ -4,6 +4,16 @@ GNU Bison NEWS ** Bug fixes +*** Generated source files when errors are reported + + When warnings are issued and -Werror is set, bison would still generate + the source files (*.c, *.h...). As a consequence, some runs of "make" + could fail the first time, but not the second (as the files were generated + anyway). + + This is fixed: bison no longer generates this source files, but, of + course, still produces the various reports (*.output, *.xml, etc.). + *** %empty is used in reports Empty right-hand sides are denoted by '%empty' in all the reports (text, diff --git a/src/scan-skel.l b/src/scan-skel.l index f13ee813..48c5e46a 100644 --- a/src/scan-skel.l +++ b/src/scan-skel.l @@ -245,7 +245,8 @@ at_output (int argc, char *argv[], char **out_namep, int *out_linenop) } *out_namep = xstrdup (argv[1]); output_file_name_check (out_namep); - yyout = xfopen (*out_namep, "w"); + /* If there were errors, do not generate the output. */ + yyout = xfopen (complaint_status ? "/dev/null" : *out_namep, "w"); *out_linenop = 1; } diff --git a/tests/output.at b/tests/output.at index 266a5032..66a3e5e9 100644 --- a/tests/output.at +++ b/tests/output.at @@ -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. ## |