Hi Paul,

> Le 23 oct. 2019 à 22:45, Paul Eggert <egg...@cs.ucla.edu> a écrit :
> 
> Actually, the GCC installation procedure derives its os/base.h from macOS's, 
> so this problem is due to Apple: they don't particularly want you to use GCC, 
> and they are in effect emasculating GCC in their <os/base.h>.

Doh...

> Thanks for diagnosing the problem. I installed a patch into Gnulib which I 
> hope fixes it:
> 
> https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=f5756b919addb9e8ce03f4e61a10e4fcff14874a

It does.

> and propagated that patch into Bison master. Please give it a try without the 
> -W workarounds; if that works, we can remove the -W workarounds for Bison.

I installed the following changes, which help me keep things easy in configure 
(which does not try to depend on the compiler version).

Thanks a lot!

commit 76597d01f3edf9330979a4f57b33803d7b97a14d
Author: Akim Demaille <akim.demai...@gmail.com>
Date:   Wed Oct 23 23:10:11 2019 +0200

    build: reenable -Wtype-limits
    
    See https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html
    to https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00073.html.
    
    Paul Eggert's changes in gnulib do fix the issue for modern GCCs (7,
    8, 9) on macOS.  Unfortunately these warnings are back on the
    CI (GNU/Linux) with GCC 4.6, 4.7, (not 4.8) and 4.9.
    
    Disable the warning locally.
    
    * configure.ac (warn_common, warn_tests): Remove -Wtype-limits.
    * src/system.h (IGNORE_TYPE_LIMITS_BEGIN, IGNORE_TYPE_LIMITS_END): New.
    * src/InadequacyList.c, src/parse-gram.c, src/parse-gram.y,
    * src/symtab.c: Use it.

diff --git a/configure.ac b/configure.ac
index 54963de0..6c62ebe8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -96,14 +96,11 @@ AM_CONDITIONAL([ENABLE_GCC_WARNINGS], [test 
"$enable_gcc_warnings" = yes])
 if test "$enable_gcc_warnings" = yes; then
   # -Wno-tautological-constant-out-of-range-compare for Clang 3.3 and
   # 3.4 on GNU/Linux that choke on intprops.h's INT_MULTIPLY_WRAPV,
-  # etc.  It's also for these macros, but on GCC 7, 8 and 9 on macOS
-  # and GCC 4.6, 4.7 and 4.9 on GNU/Linux, that we disable
-  # -Wtype-limits globally.  See
-  # https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html.
+  # etc.
   warn_common='-Wall -Wextra -Wcast-align
     -fparse-all-comments -Wdocumentation
     -Wformat -Wimplicit-fallthrough -Wnull-dereference
-    -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare 
-Wno-type-limits
+    -Wno-sign-compare -Wno-tautological-constant-out-of-range-compare
     -Wpointer-arith -Wshadow
     -Wwrite-strings'
   warn_c='-Wbad-function-cast -Wstrict-prototypes'
@@ -119,7 +116,7 @@ if test "$enable_gcc_warnings" = yes; then
   # details for lalr1.cc.
   warn_tests='-Wundef -pedantic -Wconversion
     -Wdeprecated -Wsign-compare -Wsign-conversion
-    -Wtautological-constant-out-of-range-compare -Wtype-limits
+    -Wtautological-constant-out-of-range-compare
     -fno-color-diagnostics
     -Wno-keyword-macro'
 
diff --git a/src/InadequacyList.c b/src/InadequacyList.c
index ac608afa..50e875bc 100644
--- a/src/InadequacyList.c
+++ b/src/InadequacyList.c
@@ -34,8 +34,10 @@ InadequacyList__new_conflict (state *manifesting_state, 
symbol *token,
 {
   InadequacyList *result = xmalloc (sizeof *result);
   result->id = *node_count;
+  IGNORE_TYPE_LIMITS_BEGIN
   if (INT_ADD_WRAPV (*node_count, 1, node_count))
     aver (false);
+  IGNORE_TYPE_LIMITS_END
   result->next = NULL;
   result->manifestingState = manifesting_state;
   result->contributionCount = bitset_count (actions);
diff --git a/src/parse-gram.c b/src/parse-gram.c
index 3a365d06..3b9e34a5 100644
--- a/src/parse-gram.c
+++ b/src/parse-gram.c
@@ -2988,6 +2988,7 @@ handle_pure_parser (location const *loc, char const 
*directive)
 static int
 str_to_version (char const *version)
 {
+  IGNORE_TYPE_LIMITS_BEGIN
   int res = 0;
   errno = 0;
   char *cp = NULL;
@@ -3004,6 +3005,7 @@ str_to_version (char const *version)
       || INT_ADD_WRAPV (minor, res, &res))
     return -1;
 
+  IGNORE_TYPE_LIMITS_END
   return res;
 }
 
diff --git a/src/parse-gram.y b/src/parse-gram.y
index f8c42545..d5399c75 100644
--- a/src/parse-gram.y
+++ b/src/parse-gram.y
@@ -979,6 +979,7 @@ handle_pure_parser (location const *loc, char const 
*directive)
 static int
 str_to_version (char const *version)
 {
+  IGNORE_TYPE_LIMITS_BEGIN
   int res = 0;
   errno = 0;
   char *cp = NULL;
@@ -995,6 +996,7 @@ str_to_version (char const *version)
       || INT_ADD_WRAPV (minor, res, &res))
     return -1;
 
+  IGNORE_TYPE_LIMITS_END
   return res;
 }
 
diff --git a/src/symtab.c b/src/symtab.c
index a619d177..05249d98 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -1010,8 +1010,10 @@ symbols_token_translations_init (void)
       sym_content *this = symbols[i]->content;
       if (this->user_token_number == USER_NUMBER_UNDEFINED)
         {
+          IGNORE_TYPE_LIMITS_BEGIN
           if (INT_ADD_WRAPV (max_user_token_number, 1, &max_user_token_number))
             complain (NULL, fatal, _("token number too large"));
+          IGNORE_TYPE_LIMITS_END
           this->user_token_number = max_user_token_number;
         }
       if (this->user_token_number > max_user_token_number)
diff --git a/src/system.h b/src/system.h
index d1ce0efa..773c0c60 100644
--- a/src/system.h
+++ b/src/system.h
@@ -74,6 +74,20 @@ typedef size_t uintptr_t;
 # include <xalloc.h>
 
 
+/* See https://lists.gnu.org/archive/html/bug-bison/2019-10/msg00061.html. */
+#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ < 5
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define IGNORE_TYPE_LIMITS_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wtype-limits\"")
+# define IGNORE_TYPE_LIMITS_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define IGNORE_TYPE_LIMITS_BEGIN
+# define IGNORE_TYPE_LIMITS_END
+#endif
+
+
 /*-----------------.
 | GCC extensions.  |
 `-----------------*/



Reply via email to