]> Savannah Git Hosting - gnulib.git/commitdiff
manywarnings: improve port to GCC 10.1
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 2 Jul 2020 00:00:51 +0000 (17:00 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 2 Jul 2020 00:02:20 +0000 (17:02 -0700)
* build-aux/gcc-warning.spec: Also list warnings that are default
or are enabled by already-given flags.  This lets us speed up
checking for attributes, and makes the generated compilation
commands shorter.  Add -Wanalyzer-too-complex (too much noise).
* m4/manywarnings.m4 (gl_MANYWARN_COMPLEMENT)
(gl_MANYWARN_ALL_GCC): Use gl_AS_VAR_APPEND to append
to shell variables that may have long values.
(gl_MANYWARN_ALL_GCC): Omit flags that are default or are
consequences of other flags, to speed up checking and
shorten commands.

ChangeLog
build-aux/gcc-warning.spec
m4/manywarnings.m4

index edb63b3487dfe871f24f35c2fabc898af31e37b6..6115ab946c76e8a7673378c76e7eb356558cdbc6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2020-07-01  Paul Eggert  <eggert@cs.ucla.edu>
 
+       manywarnings: improve port to GCC 10.1
+       * build-aux/gcc-warning.spec: Also list warnings that are default
+       or are enabled by already-given flags.  This lets us speed up
+       checking for attributes, and makes the generated compilation
+       commands shorter.  Add -Wanalyzer-too-complex (too much noise).
+       * m4/manywarnings.m4 (gl_MANYWARN_COMPLEMENT)
+       (gl_MANYWARN_ALL_GCC): Use gl_AS_VAR_APPEND to append
+       to shell variables that may have long values.
+       (gl_MANYWARN_ALL_GCC): Omit flags that are default or are
+       consequences of other flags, to speed up checking and
+       shorten commands.
+
        tests: pacify gcc -fanalyzer on zerosize_ptr
        * tests/test-memcasecmp.c (main):
        * tests/test-memchr.c (main):
index 89a0bc7346216363f9737051f2f157fef6ef8fce..6c0602be41286a3260b88c8ec05404795e7ac387 100644 (file)
@@ -1,24 +1,51 @@
 # options to filter out, and why
 --all-warnings                         alias for -Wall
 --extra-warnings                       alias for -Wextra
+-W                                     alias for -Wextra
 -Wabi                                  this is now a no-op
 -Wabi-tag                              c++
 -Wabi=                                 c++
+-Wabsolute-value                       enabled by -Wextra
+-Waddress                              enabled by -Wall
+-Waddress-of-packed-member             default
 -Waggregate-return                     obsolescent
+-Waggressive-loop-optimizations                default
 -Waliasing                             fortran
 -Walign-commons                                fortran
 -Waligned-new=[none|global|all]                c++
--Walloc-size-larger-than=<bytes>       handled specially by gl_MANYWARN_ALL_GCC
+-Walloc-size-larger-than=<bytes>       defaults to PTRDIFF_MAX
 -Walloc-zero                           Gnulib fixes this problem
 -Walloca                               we like alloca in small doses
 -Walloca-larger-than=<number>          FIXME: choose something sane?
 -Wampersand                            fortran
+-Wanalyzer-double-fclose               enabled by -fanalyzer
+-Wanalyzer-double-free                 enabled by -fanalyzer
+-Wanalyzer-exposure-through-output-file        enabled by -fanalyzer
+-Wanalyzer-file-leak                   enabled by -fanalyzer
+-Wanalyzer-free-of-non-heap            enabled by -fanalyzer
+-Wanalyzer-malloc-leak                 enabled by -fanalyzer
+-Wanalyzer-null-argument               enabled by -fanalyzer
+-Wanalyzer-null-dereference            enabled by -fanalyzer
+-Wanalyzer-possible-null-argument      enabled by -fanalyzer
+-Wanalyzer-possible-null-dereference   enabled by -fanalyzer
+-Wanalyzer-stale-setjmp-buffer         implied by -fanalyzer
+-Wanalyzer-tainted-array-index         FIXME maybe? too much noise
+-Wanalyzer-too-complex                 enabled by -fanalyzer
+-Wanalyzer-unsafe-call-within-signal-handler   enabled by -fanalyzer
+-Wanalyzer-use-after-free              enabled by -fanalyzer
+-Wanalyzer-use-of-pointer-in-stale-stack-frame enabled by -fanalyzer
 -Warray-bounds                         covered by -Warray-bounds=
 -Warray-bounds=<0,2>                   handled specially by gl_MANYWARN_ALL_GCC
 -Warray-temporaries                    fortran
 -Wassign-intercept                     objc/objc++
 -Wattribute-alias                      covered by -Wattribute-alias=2
 -Wattribute-alias=<0,2>                        handled specially by gl_MANYWARN_ALL_GCC
+-Wattribute-warning                    default
+-Wattributes                           default
+-Wbool-compare                         enabled by -Wall
+-Wbool-operation                       enabled by -Wall
+-Wbuiltin-declaration-mismatch         default
+-Wbuiltin-macro-redefined              default
 -Wc++-compat                           only useful for code meant to be compiled by a C++ compiler
 -Wc++0x-compat                         c++
 -Wc++11-compat                         c++
 -Wc11-c2x-compat                       c compatibility
 -Wc90-c99-compat                       c compatibility
 -Wc99-c11-compat                       c compatibility
+-Wcannot-profile                       default
+-Wcast-align                           enabled by -Wcast-align=strict
+-Wcast-function-type                   enabled by -Wextra
 -Wcast-qual                            FIXME maybe? too much noise; encourages bad changes
 -Wcast-result                          D
 -Wcatch-value                          c++
 -Wcatch-value=<0,3>                    c++
+-Wchar-subscripts                      enabled by -Wall
 -Wcharacter-truncation                 fortran
 -Wchkp                                 deprecated
 -Wclass-conversion                     c++ and objc++
 -Wclass-memaccess                      c++
+-Wclobbered                            enabled by -Wextra
 -Wcomma-subscript                      c++ and objc++
+-Wcomment                              enabled by -Wall
+-Wcomments                             alias for -Wcomment
 -Wcompare-reals                                fortran
 -Wconditionally-supported              c++ and objc++
 -Wconversion                           FIXME maybe? too much noise; encourages bad changes
 -Wconversion-extra                     fortran
 -Wconversion-null                      c++ and objc++
+-Wcoverage-mismatch                    default
+-Wcpp                                  default
 -Wctor-dtor-privacy                    c++
+-Wdangling-else                                enabled by -Wparentheses
 -Wdeclaration-after-statement          FIXME: do not want.  others may
 -Wdelete-incomplete                    c++ and objc++
 -Wdelete-non-virtual-dtor              c++
+-Wdeprecated                           default
 -Wdeprecated-copy                      c++ and objc++
 -Wdeprecated-copy-dtor                 c++ and objc++
+-Wdeprecated-declarations              default
+-Wdesignated-init                      default
+-Wdiscarded-array-qualifiers           default
+-Wdiscarded-qualifiers                 default
 -Wdo-subscript                         fortran
+-Wdiv-by-zero                          default
+-Wduplicate-decl-specifier             enabled by -Wall
 -Weffc++                               c++
+-Wempty-body                           enabled by -Wextra
+-Wenum-compare                         enabled by -Wall
+-Wenum-conversion                      enabled by -Wextra
+-Wendif-labels                         default
 -Werror-implicit-function-declaration  deprecated
+-Wexpansion-to-defined                 enabled by -Wextra
 -Wextra-semi                           c++
 -Wfloat-conversion                     FIXME maybe? borderline.  some will want this
 -Wfloat-equal                          FIXME maybe? borderline.  some will want this
 -Wformat                               covered by -Wformat=2
+-Wformat-contains-nul                  default
+-Wformat-diag                          enabled by -Wformat=2
+-Wformat-extra-args                    enabled by -Wformat=2
+-Wformat-nonliteral                    enabled by -Wformat=2
 -Wformat-overflow<0,2>                 gcc --help=warnings artifact
 -Wformat-overflow=<0,2>                        handled specially by gl_MANYWARN_ALL_GCC
+-Wformat-security                      enabled by -Wformat=2
 -Wformat-truncation                    covered by -Wformat-truncation=2
 -Wformat-truncation=<0,2>              handled specially by gl_MANYWARN_ALL_GCC
+-Wformat-y2k                           enabled by -Wformat=2
+-Wformat-zero-length                   enabled by -Wformat=2
 -Wformat=<0,2>                         gcc --help=warnings artifact
+-Wframe-address                                enabled by -Wall
 -Wframe-larger-than=<byte-size>                FIXME: choose something sane?
+-Wfree-nonheap-object                  default
 -Wfunction-elimination                 fortran
+-Whsa                                  default
+-Wif-not-aligned                       default
+-Wignored-attributes                   default
+-Wignored-qualifiers                   enabled by -Wextra
+-Wimplicit                             enabled by -Wall
 -Wimplicit-fallthrough                 covered by -Wimplicit-fallthrough=2
 -Wimplicit-fallthrough=<0,5>           handled specially by gl_MANYWARN_ALL_GCC
+-Wimplicit-function-declaration                enabled by -Wimplicit
+-Wimplicit-int                         enabled by -Wimplicit
 -Wimplicit-interface                   fortran
 -Wimplicit-procedure                   fortran
 -Winaccessible-base                    c++ and objc++
+-Wincompatible-pointer-types           default
 -Winherited-variadic-ctor              c++
 -Winit-list-lifetime                   c++ and objc++
+-Wint-conversion                       default
+-Wint-in-bool-context                  enabled by -Wall
+-Wint-to-pointer-cast                  default
 -Winteger-division                     fortran
 -Wintrinsic-shadow                     fortran
 -Wintrinsics-std                       fortran
+-Winvalid-memory-model                 default
 -Winvalid-offsetof                     c++ and objc++
 -Wjump-misses-init                     only useful for code meant to be compiled by a C++ compiler
 -Wlarger-than-                         gcc --help=warnings artifact
 -Wlarger-than=<byte-size>              FIXME: choose something sane?
 -Wline-truncation                      fortran
 -Wliteral-suffix                       c++ and objc++
+-Wlogical-not-parentheses              enabled by -Wall
 -Wlong-long                            obsolescent
 -Wlto-type-mismatch                    c++ and objc++
+-Wmain                                 enabled by -Wall
+-Wmaybe-uninitialized                  enabled by -Wall or -Wextra
+-Wmemset-elt-size                      enabled by -Wall
+-Wmemset-transposed-args               enabled by -Wall
+-Wmisleading-indentation               enabled by -Wall
 -Wmismatched-tags                      c++ and objc++
+-Wmissing-attributes                   enabled by -Wall
+-Wmissing-braces                       enabled by -Wall
+-Wmissing-field-initializers           enabled by -Wextra
 -Wmissing-format-attribute             obsolescent
 -Wmissing-noreturn                     obsolescent
+-Wmissing-parameter-type               enabled by -Wextra
+-Wmissing-profile                      default
+-Wmultichar                            default
 -Wmultiple-inheritance                 c++ and objc++
+-Wmultistatement-macros                        enabled by -Wall
 -Wnamespaces                           c++
+-Wnarrowing                            enabled by -Wall
 -Wno-alloc-size-larger-than            see -Walloc-size-larger-than
 -Wno-alloca-larger-than                        see -Walloca-larger-than
 -Wno-frame-larger-than                 see -Wframe-larger-than
 -Wnoexcept-type                                c++
 -Wnon-template-friend                  c++
 -Wnon-virtual-dtor                     c++
--Wnormalized                           covered by -Wnormalized=
--Wnormalized=[none|id|nfc|nfkc]                handled specially by gl_MANYWARN_ALL_GCC
+-Wnonnull                              enabled by -Wall or -Wformat
+-Wnonnull-compare                      enabled by -Wall
+-Wnormalized                           default
+-Wnormalized=[none|id|nfc|nfkc]                defaults to nfc
+-Wodr                                  default
 -Wold-style-cast                       c++ and objc++
+-Wold-style-declaration                        enabled by -Wextra
+-Woverflow                             default
 -Woverloaded-virtual                   c++
+-Woverride-init                                enabled by -Wextra
 -Woverride-init-side-effects           c++ and objc++
 -Woverwrite-recursive                  fortran
+-Wpacked-bitfield-compat               default
+-Wpacked-not-aligned                   enabled by -Wall
 -Wpadded                               FIXME maybe?  warns about "stabil" member in /usr/include/bits/timex.h
+-Wparentheses                          enabled by -Wall
 -Wpedantic                             FIXME: too strict?
 -Wpessimizing-move                     c++ and objc++
 -Wplacement-new                                c++
 -Wplacement-new=<0,2>                  c++
 -Wpmf-conversions                      c++ and objc++
+-Wpointer-compare                      default
+-Wpointer-sign                         enabled by -Wall
+-Wpointer-to-int-cast                  default
+-Wpragmas                              default
 -Wprio-ctor-dtor                       c++
 -Wproperty-assign-default              objc++
 -Wprotocol                             objc++
+-Wpsabi                                        default
 -Wreal-q-constant                      fortran
 -Wrealloc-lhs                          fortran
 -Wrealloc-lhs-all                      fortran
 -Wredundant-tags                       c++ and objc++
 -Wregister                             c++ and objc++
 -Wreorder                              c++ and objc++
+-Wrestrict                             enabled by -Wall
+-Wreturn-local-addr                    default
+-Wreturn-type                          enabled by -Wall
+-Wscalar-storage-order                 default
 -Wselector                             objc and objc++
+-Wsequence-point                       enabled by -Wall
 -Wshadow-compatible-local              covered by -Wshadow
 -Wshadow-ivar                          objc
 -Wshadow-local                         covered by -Wshadow
 -Wshadow=compatible-local              covered by -Wshadow
 -Wshadow=global                                covered by -Wshadow
 -Wshadow=local                         covered by -Wshadow
+-Wshift-count-negative                 default
+-Wshift-count-overflow                 default
+-Wshift-negative-value                 enabled by -Wextra
 -Wshift-overflow                       covered by -Wshift-overflow=2
 -Wshift-overflow=<0,2>                 gcc --help=warnings artifact
 -Wsign-compare                         FIXME maybe? borderline.  some will want this
 -Wsign-conversion                      FIXME maybe? borderline.  some will want this
 -Wsign-promo                           c++ and objc++
 -Wsized-deallocation                   c++ and objc++
+-Wsizeof-array-argument                        default
+-Wsizeof-pointer-div                   enabled by -Wall
+-Wsizeof-pointer-memaccess             enabled by -Wall
 -Wstack-usage=<byte-size>              FIXME: choose something sane?
+-Wstrict-aliasing                      enabled by -Wall
 -Wstrict-aliasing=<0,3>                        FIXME: choose something sane?
 -Wstrict-null-sentinel                 c++ and objc++
 -Wstrict-overflow=<0,5>                        FIXME: choose something sane?
 -Wstrict-selector-match                        objc and objc++
--Wstringop-overflow                    covered by -Wstringop-overflow=
--Wstringop-overflow=<0,4>              handled specially by gl_MANYWARN_ALL_GCC
+-Wstring-compare                       enabled by -Wextra
+-Wstringop-overflow                    covered by -Wstringop-overflow=2
+-Wstringop-overflow=<0,4>              defaults to 2
+-Wstringop-truncation                  default
 -Wsubobject-linkage                    c++ and objc++
 -Wsuggest-override                     c++ and objc++
 -Wsurprising                           fortran
+-Wswitch                               enabled by -Wall
+-Wswitch-bool                          default
 -Wswitch-default                       https://lists.gnu.org/r/bug-gnulib/2018-05/msg00179.html
 -Wswitch-enum                          FIXME maybe? borderline.  some will want this
+-Wswitch-outside-range                 default
+-Wswitch-unreachable                   default
 -Wsynth                                        deprecated
 -Wtabs                                 fortran
 -Wtarget-lifetime                      fortran
+-Wtautological-compare                 enabled by -Wall
 -Wtemplates                            c++ and objc++
 -Wterminate                            c++ and objc++
 -Wtraditional                          obsolescent
 -Wtraditional-conversion               obsolescent
+-Wtrigraphs                            enabled by -Wall
+-Wtype-limits                          enabled by -Wextra
 -Wundeclared-selector                  objc and objc++
 -Wundef                                        FIXME maybe? too many false positives
 -Wundefined-do-loop                    fortran
 -Wunderflow                            fortran
 -Wunreachable-code                     obsolescent no-op
 -Wunsuffixed-float-constants           triggers warning in gnulib's timespec.h
--Wunused-const-variable                        covered by -Wunusec-const-variable=2
+-Wunused                               enabled by -Wall
+-Wunused-but-set-parameter             enabled by -Wunused
+-Wunused-but-set-variable              enabled by -Wunused
+-Wunused-const-variable                        covered by -Wunused-const-variable=2
 -Wunused-const-variable=<0,2>          gcc --help=warnings artifact
 -Wunused-dummy-argument                        fortran
+-Wunused-function                      enabled by -Wunused
+-Wunused-label                         enabled by -Wunused
+-Wunused-local-typedefs                        enabled by -Wunused
+-Wunused-parameter                     enabled by -Wunused
+-Wunused-result                                enabled by -Wunused
+-Wunused-value                         enabled by -Wunused
+-Wunused-variable                      enabled by -Wunused
 -Wuse-without-only                     fortran
 -Wuseless-cast                         c++ and objc++
+-Wvarargs                              default
 -Wvirtual-inheritance                  c++
 -Wvirtual-move-assign                  c++
 -Wvla-larger-than=<number>             handled specially by gl_MANYWARN_ALL_GCC
 -Wvolatile                             c++ and objc++
+-Wvolatile-register-var                        enabled by -Wall
 -Wzero-as-null-pointer-constant                c++ and objc++
+-Wzero-length-bounds                   enabled by -Wall
 -Wzerotrip                             fortran
 -frequire-return-statement             go
index 719bafb2909417518dda1b34638859a6787b8be1..d18da048d9e668df8a763570366db7f05b0942cf 100644 (file)
@@ -1,4 +1,4 @@
-# manywarnings.m4 serial 19
+# manywarnings.m4 serial 20
 dnl Copyright (C) 2008-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -21,7 +21,7 @@ AC_DEFUN([gl_MANYWARN_COMPLEMENT],
       *" $gl_warn_item "*)
         ;;
       *)
-        gl_warn_set="$gl_warn_set $gl_warn_item"
+        gl_AS_VAR_APPEND([gl_warn_set], [" $gl_warn_item"])
         ;;
     esac
   done
@@ -49,12 +49,12 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)],
   AC_REQUIRE([AC_PROG_CC])
   if test -n "$GCC"; then
 
-    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
+    dnl Check if -Wextra -Werror -Wno-missing-field-initializers is supported
     dnl with the current $CC $CFLAGS $CPPFLAGS.
     AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported],
       [gl_cv_cc_nomfi_supported],
       [gl_save_CFLAGS="$CFLAGS"
-       CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
+       CFLAGS="$CFLAGS -Wextra -Werror -Wno-missing-field-initializers"
        AC_COMPILE_IFELSE(
          [AC_LANG_PROGRAM([[]], [[]])],
          [gl_cv_cc_nomfi_supported=yes],
@@ -68,7 +68,7 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)],
       AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed],
         [gl_cv_cc_nomfi_needed],
         [gl_save_CFLAGS="$CFLAGS"
-         CFLAGS="$CFLAGS -W -Werror"
+         CFLAGS="$CFLAGS -Wextra -Werror"
          AC_COMPILE_IFELSE(
            [AC_LANG_PROGRAM(
               [[int f (void)
@@ -105,153 +105,41 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)],
   # To compare this list to your installed GCC's, run this Bash command:
   #
   # comm -3 \
-  #  <((sed -n 's/^  *\(-[^ 0-9][^ ]*\) .*/\1/p' manywarnings.m4; \
+  #  <((sed -n 's/^  *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \
   #     awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \
   #  <(LC_ALL=C gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort)
 
-  gl_manywarn_set=
-  for gl_manywarn_item in -fno-common \
-    -W \
-    -Wabsolute-value \
-    -Waddress \
-    -Waddress-of-packed-member \
-    -Waggressive-loop-optimizations \
+  $1=
+  for gl_manywarn_item in -fanalyzer -fno-common \
     -Wall \
-    -Wanalyzer-double-fclose \
-    -Wanalyzer-double-free \
-    -Wanalyzer-exposure-through-output-file \
-    -Wanalyzer-file-leak \
-    -Wanalyzer-free-of-non-heap \
-    -Wanalyzer-malloc-leak \
-    -Wanalyzer-null-argument \
-    -Wanalyzer-null-dereference \
-    -Wanalyzer-possible-null-argument \
-    -Wanalyzer-possible-null-dereference \
-    -Wanalyzer-stale-setjmp-buffer \
-    -Wanalyzer-tainted-array-index \
-    -Wanalyzer-too-complex \
-    -Wanalyzer-unsafe-call-within-signal-handler \
-    -Wanalyzer-use-after-free \
-    -Wanalyzer-use-of-pointer-in-stale-stack-frame \
     -Warith-conversion \
-    -Wattribute-warning \
-    -Wattributes \
     -Wbad-function-cast \
-    -Wbool-compare \
-    -Wbool-operation \
-    -Wbuiltin-declaration-mismatch \
-    -Wbuiltin-macro-redefined \
-    -Wcannot-profile \
-    -Wcast-align \
     -Wcast-align=strict \
-    -Wcast-function-type \
-    -Wchar-subscripts \
-    -Wclobbered \
-    -Wcomment \
-    -Wcomments \
-    -Wcoverage-mismatch \
-    -Wcpp \
-    -Wdangling-else \
     -Wdate-time \
-    -Wdeprecated \
-    -Wdeprecated-declarations \
-    -Wdesignated-init \
     -Wdisabled-optimization \
-    -Wdiscarded-array-qualifiers \
-    -Wdiscarded-qualifiers \
-    -Wdiv-by-zero \
     -Wdouble-promotion \
     -Wduplicated-branches \
     -Wduplicated-cond \
-    -Wduplicate-decl-specifier \
-    -Wempty-body \
-    -Wendif-labels \
-    -Wenum-compare \
-    -Wenum-conversion \
-    -Wexpansion-to-defined \
     -Wextra \
-    -Wformat-contains-nul \
-    -Wformat-diag \
-    -Wformat-extra-args \
-    -Wformat-nonliteral \
-    -Wformat-security \
     -Wformat-signedness \
-    -Wformat-y2k \
-    -Wformat-zero-length \
-    -Wframe-address \
-    -Wfree-nonheap-object \
-    -Whsa \
-    -Wif-not-aligned \
-    -Wignored-attributes \
-    -Wignored-qualifiers \
-    -Wimplicit \
-    -Wimplicit-function-declaration \
-    -Wimplicit-int \
-    -Wincompatible-pointer-types \
     -Winit-self \
     -Winline \
-    -Wint-conversion \
-    -Wint-in-bool-context \
-    -Wint-to-pointer-cast \
-    -Winvalid-memory-model \
     -Winvalid-pch \
-    -Wlogical-not-parentheses \
     -Wlogical-op \
-    -Wmain \
-    -Wmaybe-uninitialized \
-    -Wmemset-elt-size \
-    -Wmemset-transposed-args \
-    -Wmisleading-indentation \
-    -Wmissing-attributes \
-    -Wmissing-braces \
     -Wmissing-declarations \
-    -Wmissing-field-initializers \
     -Wmissing-include-dirs \
-    -Wmissing-parameter-type \
-    -Wmissing-profile \
     -Wmissing-prototypes \
-    -Wmultichar \
-    -Wmultistatement-macros \
-    -Wnarrowing \
     -Wnested-externs \
-    -Wnonnull \
-    -Wnonnull-compare \
     -Wnull-dereference \
-    -Wodr \
-    -Wold-style-declaration \
     -Wold-style-definition \
     -Wopenmp-simd \
-    -Woverflow \
     -Woverlength-strings \
-    -Woverride-init \
     -Wpacked \
-    -Wpacked-bitfield-compat \
-    -Wpacked-not-aligned \
-    -Wparentheses \
     -Wpointer-arith \
-    -Wpointer-compare \
-    -Wpointer-sign \
-    -Wpointer-to-int-cast \
-    -Wpragmas \
-    -Wpsabi \
-    -Wrestrict \
-    -Wreturn-local-addr \
-    -Wreturn-type \
-    -Wscalar-storage-order \
-    -Wsequence-point \
     -Wshadow \
-    -Wshift-count-negative \
-    -Wshift-count-overflow \
-    -Wshift-negative-value \
-    -Wsizeof-array-argument \
-    -Wsizeof-pointer-div \
-    -Wsizeof-pointer-memaccess \
     -Wstack-protector \
-    -Wstrict-aliasing \
     -Wstrict-overflow \
     -Wstrict-prototypes \
-    -Wstring-compare \
-    -Wstringop-truncation \
     -Wsuggest-attribute=cold \
     -Wsuggest-attribute=const \
     -Wsuggest-attribute=format \
@@ -260,95 +148,63 @@ m4_defun([gl_MANYWARN_ALL_GCC(C)],
     -Wsuggest-attribute=pure \
     -Wsuggest-final-methods \
     -Wsuggest-final-types \
-    -Wswitch \
-    -Wswitch-bool \
-    -Wswitch-outside-range \
-    -Wswitch-unreachable \
     -Wsync-nand \
     -Wsystem-headers \
-    -Wtautological-compare \
     -Wtrampolines \
-    -Wtrigraphs \
-    -Wtype-limits \
     -Wuninitialized \
     -Wunknown-pragmas \
     -Wunsafe-loop-optimizations \
-    -Wunused \
-    -Wunused-but-set-parameter \
-    -Wunused-but-set-variable \
-    -Wunused-function \
-    -Wunused-label \
-    -Wunused-local-typedefs \
     -Wunused-macros \
-    -Wunused-parameter \
-    -Wunused-result \
-    -Wunused-value \
-    -Wunused-variable \
-    -Wvarargs \
     -Wvariadic-macros \
     -Wvector-operation-performance \
     -Wvla \
-    -Wvolatile-register-var \
     -Wwrite-strings \
-    -Wzero-length-bounds \
     \
     ; do
-    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+    gl_AS_VAR_APPEND([$1], [" $gl_manywarn_item"])
   done
 
   # gcc --help=warnings outputs an unusual form for these options; list
   # them here so that the above 'comm' command doesn't report a false match.
-  # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal.
-  # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on
-  # the only platforms where it does not fit in a long, so make that
-  # a special case.
-  AC_MSG_CHECKING([max safe object size])
-  AC_COMPUTE_INT([gl_alloc_max],
-    [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1)
-     ? -1
-     : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1],
-    [[#include <limits.h>
-      #include <stddef.h>
-      #include <stdint.h>
-    ]],
-    [gl_alloc_max=2147483647])
-  case $gl_alloc_max in
-    -1) gl_alloc_max=9223372036854775807;;
-  esac
-  AC_MSG_RESULT([$gl_alloc_max])
-  gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max"
-  gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
-  gl_manywarn_set="$gl_manywarn_set -Wattribute-alias=2"
-  gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2"
-  gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2"
-  gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5"
-  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
-  gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
-  gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2"
-  gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
-  gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031"
+  gl_AS_VAR_APPEND([$1], [' -Warray-bounds=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wattribute-alias=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wformat-overflow=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wformat=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wformat-truncation=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wimplicit-fallthrough=5'])
+  gl_AS_VAR_APPEND([$1], [' -Wshift-overflow=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wunused-const-variable=2'])
+  gl_AS_VAR_APPEND([$1], [' -Wvla-larger-than=4031'])
 
   # These are needed for older GCC versions.
   if test -n "$GCC"; then
     case `($CC --version) 2>/dev/null` in
       'gcc (GCC) '[[0-3]].* | \
       'gcc (GCC) '4.[[0-7]].*)
-        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
-        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
+        gl_AS_VAR_APPEND([$1], [' -fdiagnostics-show-option'])
+        gl_AS_VAR_APPEND([$1], [' -funit-at-a-time'])
           ;;
     esac
   fi
 
   # Disable specific options as needed.
   if test "$gl_cv_cc_nomfi_needed" = yes; then
-    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
+    gl_AS_VAR_APPEND([$1], [' -Wno-missing-field-initializers'])
   fi
 
   if test "$gl_cv_cc_uninitialized_supported" = no; then
-    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
+    gl_AS_VAR_APPEND([$1], [' -Wno-uninitialized'])
   fi
 
-  $1=$gl_manywarn_set
+  # Some warnings have too many false alarms in GCC 10.1.
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93695
+  gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-double-free'])
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94458
+  gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-malloc-leak'])
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94851
+  gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-null-dereference'])
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95758
+  gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-use-after-free'])
 
   AC_LANG_POP([C])
 ])