]> git.saurik.com Git - bison.git/commitdiff
output: do not generate source files when late errors are caught
authorAkim Demaille <akim@lrde.epita.fr>
Wed, 4 Dec 2013 09:51:47 +0000 (10:51 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Wed, 4 Dec 2013 14:53:01 +0000 (15:53 +0100)
Reported by Alexandre Duret-Lutz as "second problem" in:
http://lists.gnu.org/archive/html/bug-bison/2013-09/msg00015.html

* bootstrap.conf: We need the "unlink" module.
* src/files.h, src/files.c (unlink_generated_sources): New.
* src/output.c: Use it.
* tests/output.at: Check the case of late errors.

bootstrap.conf
src/files.c
src/files.h
src/output.c
tests/output.at

index c58470e28b448e481dad64d7fd7c0b91e0c33739..186afa718df8cf1f94671d8206e3567952842ed3 100644 (file)
@@ -34,7 +34,8 @@ gnulib_modules='
   readme-release
   realloc-posix
   spawn-pipe stdbool stpcpy strdup-posix strerror strtoul strverscmp
-  unistd unistd-safer unlocked-io update-copyright unsetenv verify
+  unistd unistd-safer unlink unlocked-io
+  update-copyright unsetenv verify
   warnings
   xalloc
   xalloc-die
index 46868365aa4a291e2d78178bac6d7fd7e390bd26..c50f774af989888f365495d4964642e90d0de75a 100644 (file)
@@ -398,6 +398,16 @@ output_file_name_check (char **file_name, bool source)
     }
 }
 
+void
+unlink_generated_sources (void)
+{
+  int i;
+  for (i = 0; i < generated_files_size; i++)
+    if (generated_files[i].is_source)
+      /* Ignore errors.  The file might not even exist.  */
+      unlink (generated_files[i].name);
+}
+
 void
 output_file_names_free (void)
 {
index 94833f71d8c15353d1975fe155c02c1a2cd293b3..9b8571905a0086efc69df95a3618d665600105c9 100644 (file)
@@ -70,6 +70,9 @@ void output_file_names_free (void);
  */
 void output_file_name_check (char **file_name, bool source);
 
+/** Remove all the generated source files. */
+void unlink_generated_sources (void);
+
 FILE *xfopen (const char *name, char const *mode);
 void xfclose (FILE *ptr);
 FILE *xfdopen (int fd, char const *mode);
index 5eafb2e33a30989f53dd5536e8ec97ba6829db40..ab1bdea106001b6f45faa6555a12f3d499cd06c9 100644 (file)
@@ -704,6 +704,11 @@ output (void)
   /* Process the selected skeleton file.  */
   output_skeleton ();
 
+  /* If late errors were generated, destroy the generated source
+     files. */
+  if (complaint_status)
+    unlink_generated_sources ();
+
   obstack_free (&format_obstack, NULL);
 }
 
index 66a3e5e94dcfe2d60c2204a88f76e960ae6e85dd..be3078f8cbd21aa7bce38b1e1f4f36f8666a825b 100644 (file)
@@ -43,7 +43,7 @@ done
 ]AT_DATA([$1],
 [$2[
 %%
-foo: {};
+foo: %empty {};
 ]])[
 
 ]AT_BISON_CHECK([$3 $1], [$5], [], [ignore])[
@@ -126,6 +126,14 @@ AT_CHECK_OUTPUT([foo.y], [%type <foo> useless],
                 [foo.dot foo.output foo.xml],
                 [1])
 
+# Do not generate code when there are late errors (even warnings as
+# errors).
+AT_CHECK_OUTPUT([foo.y], [%define useless],
+                [--defines --graph --xml --report=all -Wall -Werror],
+                [foo.dot foo.output foo.xml],
+                [1])
+
+
 ## ------------ ##
 ## C++ output.  ##
 ## ------------ ##