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. | `-----------------*/