bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

merge maint into master


From: Akim Demaille
Subject: merge maint into master
Date: Wed, 3 Jun 2020 08:29:04 +0200

commit 7e16bd2cae4f6762449927b2ca3159f44724a3ee
Merge: 94f7606d 508ac099
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Wed Jun 3 08:12:10 2020 +0200

    Merge maint into HEAD
    
    * upstream/maint:
      maint: post-release administrivia
      version 3.6.3
      build: check -Wmissing-prototypes
      tests: show logs
      c++: fix printing of state number on streams

diff --git a/.prev-version b/.prev-version
index b7276283..4a788a01 100644
--- a/.prev-version
+++ b/.prev-version
@@ -1 +1 @@
-3.6.2
+3.6.3
diff --git a/NEWS b/NEWS
index 8fc26618..4c77cedd 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,16 @@ GNU Bison NEWS
   to the -ffile-prefix-map in GCC. This option can be used to make bison output
   reproducible.
 
+* Noteworthy changes in release 3.6.3 (2020-06-03) [stable]
+
+** Bug fixes
+
+  Incorrect comments in the generated parsers.
+
+  Warnings in push parsers (yacc.c).
+
+  Incorrect display of gotos in LAC traces (lalr1.cc).
+
 * Noteworthy changes in release 3.6.2 (2020-05-17) [stable]
 
 ** Bug fixes
diff --git a/README-hacking.md b/README-hacking.md
index 2fa15824..338a03ac 100644
--- a/README-hacking.md
+++ b/README-hacking.md
@@ -73,7 +73,7 @@ The `#include` directives follow an order:
   <verify.h>`, not `#include "verify.h"`).
 - then headers from src/ with double quotes (`#include "getargs.h"`).
 
-Keep headers sort alphabetically in each section.
+Keep headers sorted alphabetically in each section.
 
 See also the [Header
 files](https://www.gnu.org/software/gnulib/manual/html_node/Header-files.html)
@@ -100,7 +100,7 @@ We indent the CPP directives this way:
 #endif
 ```
 
-Don't indent with leading spaces in the skeletons (it's ok in the grammar
+Don't indent with leading spaces in the skeletons (it's OK in the grammar
 files though, e.g., in `%code {...}` blocks).
 
 On occasions, use `cppi -c` to see where we stand.  We don't aim at full
@@ -111,7 +111,7 @@ of the *.h file, but don't waste time on this.
 Don't hesitate to leave a comment on the `#endif` (e.g., `#endif /* FOO
 */`), especially for long blocks.
 
-There is no conistency on `! defined` vs. `!defined`.  The day gnulib
+There is no consistency on `! defined` vs. `!defined`.  The day gnulib
 decides, we'll follow them.
 
 #### C/C++
@@ -439,11 +439,11 @@ Use the `javaexec.sh` script.  For instance to run the 
parser of test case
 
 ## Using Sanitizers
 Address sanitizer (ASAN) and undefined-behavior sanitizer (UBSAN) are very
-useful.  Here's one way to set ASAN up with GCC 10 on MacPorts
+useful.  Here's one way to set ASAN up with GCC 10 on Mac Ports
 
 1. Configure with
 
-    $ ~bison/configure -C --enable-gcc-warnings \
+    $ ./configure -C --enable-gcc-warnings \
         CPPFLAGS='-isystem /opt/local/include' \
         CC='gcc-mp-10 -fsanitize=address' \
         CFLAGS='-ggdb' \
@@ -577,8 +577,10 @@ LocalWords:  symlinks vti html lt POSIX Cc'ed Graphviz 
Texinfo autoconf jN
 LocalWords:  automake autopoint graphviz texinfo PROG Wother parsers YYFOO
 LocalWords:  TESTSUITEFLAGS deprec struct gnulib's getopt config ggdb yyfoo
 LocalWords:  bitset fsanitize symlink CFLAGS MERCHANTABILITY ispell wrt YY
-LocalWords:  american Administrivia camlCase yy accessors namespace src
-LocalWords:  getExpectedTokens yyexpectedTokens yygetExpectedTokens
-LocalWords:  regen dogfooding Autotest testsuite
+LocalWords:  american Administrivia camlCase yy accessors namespace src hoc
+LocalWords:  getExpectedTokens yyexpectedTokens yygetExpectedTokens parens
+LocalWords:  regen dogfooding Autotest testsuite getargs CPP BAZ endif cppi
+LocalWords:  cpp javaexec cp Calc ASAN UBSAN CPPFLAGS isystem CXX cex
+LocalWords:  CXXFLAGS LDFLAGS dsymutil
 
 -->
diff --git a/THANKS b/THANKS
index 48b31ea9..36df5e29 100644
--- a/THANKS
+++ b/THANKS
@@ -162,6 +162,7 @@ Quoc Peyrot               chojin@lrde.epita.fr
 R Blake                   blakers@mac.com
 Raja R Harinath           harinath@cs.umn.edu
 Ralf Wildenhues           Ralf.Wildenhues@gmx.de
+Ryan                      dev@splintermail.com
 Rich Wilson               richaw@gmail.com
 Richard Stallman          rms@gnu.org
 Rici Lake                 ricilake@gmail.com
diff --git a/configure.ac b/configure.ac
index edc05eb5..c5750a6d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,10 +132,12 @@ if test "$enable_gcc_warnings" = yes; then
     -fparse-all-comments -Wdocumentation
     -Wformat -Wimplicit-fallthrough -Wnull-dereference
     -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare
-    -Wpointer-arith -Wshadow
+    -Wpointer-arith -Wshadow -Wstrict-aliasing
     -Wwrite-strings
     -wr188 -wr2259 -wr3179'
-  warn_c='-Wbad-function-cast -Wstrict-prototypes'
+  warn_c='-Wbad-function-cast
+    -Wmissing-prototypes
+    -Wstrict-prototypes'
   warn_cxx='-Wextra-semi -Wnoexcept -Wold-style-cast -Wundefined-func-template
     -Wweak-vtables'
   # Warnings for the test suite only.
diff --git a/data/skeletons/yacc.c b/data/skeletons/yacc.c
index b82029c0..ffc02efd 100644
--- a/data/skeletons/yacc.c
+++ b/data/skeletons/yacc.c
@@ -1480,7 +1480,7 @@ yypull_parse (yypstate *yyps]b4_user_formals[)
 ]b4_parse_state_variable_macros([b4_pstate_macro_define])[
 
 /* Initialize the parser data structure.  */
-void
+static void
 yypstate_clear (yypstate *yyps)
 {
 ]b4_initialize_parser_state_variables[
diff --git a/doc/bison.texi b/doc/bison.texi
index 2e002294..cc71a69b 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -1879,6 +1879,7 @@ Here is the code for the lexical analyzer:
    and tabs, and returns 0 for end-of-input. */
 
 #include <ctype.h>
+#include <stdlib.h>
 @end group
 
 @group
@@ -1895,7 +1896,8 @@ yylex (void)
   if (c == '.' || isdigit (c))
     @{
       ungetc (c, stdin);
-      scanf ("%lf", &yylval);
+      if (scanf ("%lf", &yylval) != 1)
+        abort ();
       return NUM;
     @}
 @end group
@@ -2729,8 +2731,8 @@ yylex (void)
   if (c == '.' || isdigit (c))
     @{
       ungetc (c, stdin);
-      int n = scanf ("%lf", &yylval.NUM);
-      assert (n == 1);
+      if (scanf ("%lf", &yylval.NUM) != 1)
+        abort ();
       return NUM;
     @}
 @end group
@@ -2757,10 +2759,10 @@ Bison generated a definition of @code{YYSTYPE} with a 
member named
           if (bufsize <= i)
             @{
               bufsize = 2 * bufsize + 40;
-              symbuf = realloc (symbuf, bufsize);
+              symbuf = realloc (symbuf, (size_t) bufsize);
             @}
           /* Add this character to the buffer. */
-          symbuf[i++] = c;
+          symbuf[i++] = (char) c;
           /* Get another character. */
           c = getchar ();
         @}
@@ -10630,7 +10632,7 @@ when there were errors.  No file was generated (except 
the reports generated
 by @option{--verbose}, etc.).  In particular, the output files that possibly
 existed were not changed.
 
-@item 63 (mistmatch)
+@item 63 (mismatch)
 when @command{bison} does not meet the version requirements of the grammar
 file. @xref{Require Decl}.  No file was generated or changed.
 @end table
@@ -15274,6 +15276,7 @@ London, Department of Computer Science, TR-00-12 
(December 2000).
 @c LocalWords: YYUNDEF SymbolKind yypcontext YYENOMEM TOKENMAX getBundle
 @c LocalWords: ResourceBundle myResources getString getName getToken
 @c LocalWords: getLocation getExpectedTokens reportSyntaxError bistromathic
+@c LocalWords: TokenKind
 
 @c Local Variables:
 @c ispell-dictionary: "american"
diff --git a/examples/c/bistromathic/local.mk b/examples/c/bistromathic/local.mk
index cad0425b..e9801ab2 100644
--- a/examples/c/bistromathic/local.mk
+++ b/examples/c/bistromathic/local.mk
@@ -31,6 +31,7 @@ if ENABLE_BISTROMATHIC
     -DBISON_LOCALEDIR='"$(localdir)"'          \
     -DLOCALEDIR='"$(localdir)"'                        \
     -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+  %C%_bistromathic_CFLAGS = $(TEST_CFLAGS)
   %C%_bistromathic_LDADD = -lm $(LIBREADLINE) $(LIBINTL)
 endif
 
diff --git a/examples/c/bistromathic/parse.y b/examples/c/bistromathic/parse.y
index 78ec6eb7..dc048cfe 100644
--- a/examples/c/bistromathic/parse.y
+++ b/examples/c/bistromathic/parse.y
@@ -1,7 +1,6 @@
 %require "3.6"
 
 %code top {
-  #include <assert.h>
   #include <ctype.h>  // isdigit
   #include <locale.h> // LC_ALL
   #include <math.h>   // cos, sin, etc.
@@ -218,7 +217,7 @@ getsym (char const *name)
 }
 
 // How many symbols are registered.
-int
+static int
 symbol_count (void)
 {
   int res = 0;
@@ -314,7 +313,7 @@ yylex (const char **line, YYSTYPE *yylval, YYLTYPE *yylloc)
 `---------*/
 
 
-const char *
+static const char *
 error_format_string (int argc)
 {
   switch (argc)
@@ -409,7 +408,8 @@ xstrndup (const char *string, size_t n)
   const char *end = memchr (string, '\0', n);
   size_t len = end ? (size_t) (end - string) : n;
   char *new = malloc (len + 1);
-  assert (new);
+  if (!new)
+    abort ();
   new[len] = '\0';
   return memcpy (new, string, len);
 }
@@ -420,7 +420,8 @@ xstrndup (const char *string, size_t n)
 `-----------*/
 
 // Parse (and execute) this line.
-int process_line (YYLTYPE *lloc, const char *line)
+static int
+process_line (YYLTYPE *lloc, const char *line)
 {
   yypstate *ps = yypstate_new ();
   int status = 0;
@@ -435,7 +436,8 @@ int process_line (YYLTYPE *lloc, const char *line)
 }
 
 // Get the list of possible tokens after INPUT was read.
-int
+// Returns a nonnegative.
+static int
 expected_tokens (const char *input,
                  int *tokens, int ntokens)
 {
@@ -456,6 +458,8 @@ expected_tokens (const char *input,
 
   // Then query for the accepted tokens at this point.
   int res = yypstate_expected_tokens (ps, tokens, ntokens);
+  if (res < 0)
+    abort ();
   yypstate_delete (ps);
   return res;
 }
@@ -465,7 +469,7 @@ expected_tokens (const char *input,
 // TEXT is the word to complete.  We can use the entire contents of
 // rl_line_buffer in case we want to do some simple parsing.  Return
 // the array of matches, or NULL if there aren't any.
-char **
+static char **
 completion (const char *text, int start, int end)
 {
   YYDPRINTF ((stderr, "completion (\"%.*s[%.*s]%s\")\n",
@@ -475,14 +479,17 @@ completion (const char *text, int start, int end)
 
   // Get list of token numbers.
   int tokens[YYNTOKENS];
-  char *line = xstrndup (rl_line_buffer, start);
+  char *line = xstrndup (rl_line_buffer, (size_t) start);
   int ntokens = expected_tokens (line, tokens, YYNTOKENS);
   free (line);
 
   // Build MATCHES, the list of possible completions.
-  const int len = strlen (text);
+  const size_t len = strlen (text);
   // Need initial prefix and final NULL.
-  char **matches = calloc (ntokens + symbol_count () + 2, sizeof *matches);
+  char **matches
+    = calloc ((size_t) ntokens + (size_t) symbol_count () + 2, sizeof 
*matches);
+  if (!matches)
+    abort ();
   int match = 1;
   for (int i = 0; i < ntokens; ++i)
     switch (tokens[i])
@@ -512,9 +519,9 @@ completion (const char *text, int start, int end)
     matches[0] = strdup (text);
   else
     {
-      int lcplen = strlen (matches[1]);
+      size_t lcplen = strlen (matches[1]);
       for (int i = 2; i < match && lcplen; ++i)
-        for (int j = 0; j < lcplen; ++j)
+        for (size_t j = 0; j < lcplen; ++j)
           if (matches[1][j] != matches[i][j])
             lcplen = j;
       matches[0] = xstrndup (matches[1], lcplen);
@@ -538,7 +545,8 @@ completion (const char *text, int start, int end)
   return matches;
 }
 
-void init_readline (void)
+static void
+init_readline (void)
 {
   // Allow conditional parsing of the ~/.inputrc file.
   rl_readline_name = "bistromathic";
@@ -557,7 +565,8 @@ void init_readline (void)
 | Main.  |
 `-------*/
 
-int main (int argc, char const* argv[])
+int
+main (int argc, char const* argv[])
 {
 #if defined ENABLE_NLS && ENABLE_NLS
   // Set up internationalization.
diff --git a/examples/c/calc/calc.y b/examples/c/calc/calc.y
index ff571114..6daf22b3 100644
--- a/examples/c/calc/calc.y
+++ b/examples/c/calc/calc.y
@@ -1,7 +1,8 @@
 %code top {
   #include <assert.h>
   #include <ctype.h>  /* isdigit. */
-  #include <stdio.h>  /* For printf, etc. */
+  #include <stdio.h>  /* printf. */
+  #include <stdlib.h> /* abort. */
   #include <string.h> /* strcmp. */
 
   int yylex (void);
@@ -74,8 +75,8 @@ yylex (void)
   if (c == '.' || isdigit (c))
     {
       ungetc (c, stdin);
-      int n = scanf ("%lf", &yylval.NUM);
-      assert (n == 1);
+      if (scanf ("%lf", &yylval.NUM) != 1)
+        abort ();
       return NUM;
     }
 
diff --git a/examples/c/calc/local.mk b/examples/c/calc/local.mk
index 14b78f3b..503b034a 100644
--- a/examples/c/calc/local.mk
+++ b/examples/c/calc/local.mk
@@ -27,6 +27,7 @@ nodist_%C%_calc_SOURCES = %D%/calc.y
 
 # Don't use gnulib's system headers.
 %C%_calc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+%C%_calc_CFLAGS = $(TEST_CFLAGS)
 
 dist_calc_DATA = %D%/calc.y %D%/Makefile %D%/README.md
 CLEANFILES += %D%/calc.[ch] %D%/calc.output %D%/scan.c
diff --git a/examples/c/lexcalc/local.mk b/examples/c/lexcalc/local.mk
index 0acd2607..b73887e2 100644
--- a/examples/c/lexcalc/local.mk
+++ b/examples/c/lexcalc/local.mk
@@ -25,6 +25,8 @@ if FLEX_WORKS
   nodist_%C%_lexcalc_SOURCES = %D%/parse.y %D%/parse.h %D%/scan.l
   # Don't use gnulib's system headers.
   %C%_lexcalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+  # Fighting warnings triggered by Flex is just too painful.
+  # %C%_lexcalc_CFLAGS = $(TEST_CFLAGS)
 endif FLEX_WORKS
 
 %D%/parse.c: $(dependencies)
diff --git a/examples/c/lexcalc/scan.l b/examples/c/lexcalc/scan.l
index d66a23cf..708fd28b 100644
--- a/examples/c/lexcalc/scan.l
+++ b/examples/c/lexcalc/scan.l
@@ -4,7 +4,7 @@
 %option nodefault noinput nounput noyywrap
 
 %{
-#include <errno.h> /* errno, ERANGE */
+#include <errno.h>  /* errno, ERANGE */
 #include <limits.h> /* INT_MIN */
 #include <stdlib.h> /* strtol */
 
@@ -12,7 +12,7 @@
 
   // Each time a rule is matched, advance the end cursor/position.
 #define YY_USER_ACTION                          \
-  yylloc->last_column += yyleng;
+  yylloc->last_column += (int) yyleng;
 
   // Move the first position onto the last.
 #define LOCATION_STEP()                         \
diff --git a/examples/c/mfcalc/local.mk b/examples/c/mfcalc/local.mk
index 2c0fcb5e..69c91f71 100644
--- a/examples/c/mfcalc/local.mk
+++ b/examples/c/mfcalc/local.mk
@@ -31,6 +31,7 @@ nodist_%C%_mfcalc_SOURCES = $(mfcalc_sources)
 %D%/mfcalc.c: $(dependencies)
 # Don't use gnulib's system headers.
 %C%_mfcalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+%C%_mfcalc_CFLAGS = $(TEST_CFLAGS)
 %C%_mfcalc_LDADD = -lm
 
 dist_TESTS += %D%/mfcalc.test
diff --git a/examples/c/pushcalc/calc.y b/examples/c/pushcalc/calc.y
index bc27ae95..6d49470c 100644
--- a/examples/c/pushcalc/calc.y
+++ b/examples/c/pushcalc/calc.y
@@ -1,7 +1,7 @@
 %code top {
-  #include <assert.h>
   #include <ctype.h>  /* isdigit. */
-  #include <stdio.h>  /* For printf, etc. */
+  #include <stdio.h>  /* printf. */
+  #include <stdlib.h> /* abort. */
   #include <string.h> /* strcmp. */
 }
 
@@ -81,8 +81,8 @@ yylex (YYSTYPE *yylval)
   if (c == '.' || isdigit (c))
     {
       ungetc (c, stdin);
-      int n = scanf ("%lf", &yylval->NUM);
-      assert (n == 1);
+      if (scanf ("%lf", &yylval->NUM) != 1)
+        abort ();
       return NUM;
     }
 
diff --git a/examples/c/pushcalc/local.mk b/examples/c/pushcalc/local.mk
index 9b6b19d6..7f53a0c1 100644
--- a/examples/c/pushcalc/local.mk
+++ b/examples/c/pushcalc/local.mk
@@ -27,6 +27,7 @@ nodist_%C%_calc_SOURCES = %D%/calc.y
 
 # Don't use gnulib's system headers.
 %C%_calc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+%C%_calc_CFLAGS = $(TEST_CFLAGS)
 
 dist_pushcalc_DATA = %D%/calc.y %D%/Makefile %D%/README.md
 CLEANFILES += %D%/calc.[ch] %D%/calc.output
diff --git a/examples/c/reccalc/local.mk b/examples/c/reccalc/local.mk
index 0538f120..41a12828 100644
--- a/examples/c/reccalc/local.mk
+++ b/examples/c/reccalc/local.mk
@@ -26,6 +26,8 @@ if FLEX_WORKS
   BUILT_SOURCES += $(nodist_%C%_reccalc_SOURCES)
   # Don't use gnulib's system headers.
   %C%_reccalc_CPPFLAGS = -I$(top_srcdir)/%D% -I$(top_builddir)/%D%
+  # Fighting warnings triggered by Flex is just too painful.
+  # %C%_reccalc_CFLAGS = $(TEST_CFLAGS)
 endif FLEX_WORKS
 
 %D%/parse.c: $(dependencies)
diff --git a/examples/c/reccalc/scan.l b/examples/c/reccalc/scan.l
index 0bf5210c..45d70d3b 100644
--- a/examples/c/reccalc/scan.l
+++ b/examples/c/reccalc/scan.l
@@ -32,9 +32,9 @@
         do                                              \
           capacity = capacity ? 2 * capacity : 128;     \
         while (capacity < size + yyleng + 1);           \
-        str = realloc (str, capacity);                  \
+        str = realloc (str, (size_t) capacity);         \
       }                                                 \
-    memcpy (str + size, yytext, yyleng);                \
+    memcpy (str + size, yytext, (size_t) yyleng);       \
     size += yyleng;                                     \
     assert (size < capacity);                           \
   } while (0)
diff --git a/examples/c/rpcalc/local.mk b/examples/c/rpcalc/local.mk
index f10f7c19..0c3bfd8a 100644
--- a/examples/c/rpcalc/local.mk
+++ b/examples/c/rpcalc/local.mk
@@ -31,6 +31,7 @@ nodist_%C%_rpcalc_SOURCES = $(rpcalc_sources)
 %D%/rpcalc.c: $(dependencies)
 # Don't use gnulib's system headers.
 %C%_rpcalc_CPPFLAGS = -I$(top_builddir)/%D%
+%C%_rpcalc_CFLAGS = $(TEST_CFLAGS)
 %C%_rpcalc_LDADD = -lm
 
 dist_TESTS += %D%/rpcalc.test
diff --git a/examples/local.mk b/examples/local.mk
index 854a5da4..51c2c5a2 100644
--- a/examples/local.mk
+++ b/examples/local.mk
@@ -35,6 +35,9 @@
 dist_noinst_SCRIPTS = %D%/extexi %D%/test
 TEST_LOG_COMPILER = $(SHELL) $(top_srcdir)/%D%/test
 
+TEST_CFLAGS =                                          \
+  $(WARN_CFLAGS) $(WARN_CFLAGS_TEST) $(WERROR_CFLAGS)
+
 AM_CXXFLAGS =                                                  \
   $(WARN_CXXFLAGS) $(WARN_CXXFLAGS_TEST) $(WERROR_CXXFLAGS)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]