Adjust for C programs compiled by GCC 13.
(A C++ expert still needs to look at manywarnings-c++.m4.)
* build-aux/gcc-warning.spec: Add warnings introduced in GCC 13.
* doc/manywarnings.texi (manywarnings): Document flex arrays.
* m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add
-fstrict-flex-arrays and -Wstrict-flex-arrays as these should be
suitable for Gnulib-using code.
---
 ChangeLog                  |  9 +++++++++
 build-aux/gcc-warning.spec | 30 ++++++++++++++++++++++++++++++
 doc/manywarnings.texi      |  7 +++++++
 m4/manywarnings.m4         |  3 ++-
 4 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 5246e88037..ff1f6abca3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2023-04-23  Paul Eggert  <egg...@cs.ucla.edu>
 
+       manywarnings: update C warnings for GCC 13
+       Adjust for C programs compiled by GCC 13.
+       (A C++ expert still needs to look at manywarnings-c++.m4.)
+       * build-aux/gcc-warning.spec: Add warnings introduced in GCC 13.
+       * doc/manywarnings.texi (manywarnings): Document flex arrays.
+       * m4/manywarnings.m4 (gl_MANYWARN_ALL_GCC): Add
+       -fstrict-flex-arrays and -Wstrict-flex-arrays as these should be
+       suitable for Gnulib-using code.
+
        manywarnings: bring doc up to date
        * doc/manywarnings.texi: Bring doc up to date for GCC 12.
 
diff --git a/build-aux/gcc-warning.spec b/build-aux/gcc-warning.spec
index cbcbc87f9a..09350012ba 100644
--- a/build-aux/gcc-warning.spec
+++ b/build-aux/gcc-warning.spec
@@ -18,25 +18,45 @@
 -Walloca                               we like alloca in small doses
 -Walloca-larger-than=<number>          FIXME: choose something sane?
 -Wampersand                            fortran
+-Wanalyzer-allocation-size             enabled by -fanalyzer
+-Wanalyzer-deref-before-check          enabled by -fanalyzer
 -Wanalyzer-double-fclose               enabled by -fanalyzer
 -Wanalyzer-double-free                 enabled by -fanalyzer
 -Wanalyzer-exposure-through-output-file        enabled by -fanalyzer
+-Wanalyzer-exposure-through-uninit-copy        enabled by -fanalyzer
+-Wanalyzer-fd-access-mode-mismatch     enabled by -fanalyzer
+-Wanalyzer-fd-double-close             enabled by -fanalyzer
+-Wanalyzer-fd-leak                     enabled by -fanalyzer
+-Wanalyzer-fd-phase-mismatch           enabled by -fanalyzer
+-Wanalyzer-fd-type-mismatch            enabled by -fanalyzer
+-Wanalyzer-fd-use-after-close          enabled by -fanalyzer
+-Wanalyzer-fd-use-without-check                enabled by -fanalyzer
 -Wanalyzer-file-leak                   enabled by -fanalyzer
 -Wanalyzer-free-of-non-heap            enabled by -fanalyzer
+-Wanalyzer-imprecise-fp-arithmetic     enabled by -fanalyzer
+-Wanalyzer-infinite-recursion          enabled by -fanalyzer
+-Wanalyzer-jump-through-null           enabled by -fanalyzer
 -Wanalyzer-malloc-leak                 enabled by -fanalyzer
 -Wanalyzer-mismatching-deallocation    enabled by -fanalyzer
 -Wanalyzer-null-argument               enabled by -fanalyzer
 -Wanalyzer-null-dereference            enabled by -fanalyzer
+-Wanalyzer-out-of-bounds               enabled by -fanalyzer
 -Wanalyzer-possible-null-argument      enabled by -fanalyzer
 -Wanalyzer-possible-null-dereference   enabled by -fanalyzer
+-Wanalyzer-putenv-of-auto-var          enabled by -fanalyzer
 -Wanalyzer-shift-count-negative                enabled by -fanalyzer
 -Wanalyzer-shift-count-overflow                enabled by -fanalyzer
 -Wanalyzer-stale-setjmp-buffer         implied by -fanalyzer
 -Wanalyzer-tainted-allocation-size     FIXME requires -fanalyzer-checker=taint
 -Wanalyzer-tainted-array-index         FIXME requires -fanalyzer-checker=taint
+-Wanalyzer-tainted-assertion           FIXME requires -fanalyzer-checker=taint
 -Wanalyzer-tainted-divisor             FIXME requires -fanalyzer-checker=taint
 -Wanalyzer-tainted-offset              FIXME requires -fanalyzer-checker=taint
 -Wanalyzer-tainted-size                        FIXME requires 
-fanalyzer-checker=taint
+-Wanalyzer-va-arg-type-mismatch                enabled by -fanalyzer
+-Wanalyzer-va-list-exhausted           enabled by -fanalyzer
+-Wanalyzer-va-list-leak                        enabled by -fanalyzer
+-Wanalyzer-va-list-use-after-va-end    enabled by -fanalyzer
 -Wanalyzer-too-complex                 enabled by -fanalyzer
 -Wanalyzer-unsafe-call-within-signal-handler   enabled by -fanalyzer
 -Wanalyzer-use-after-free              enabled by -fanalyzer
@@ -85,6 +105,7 @@
 -Wcast-result                          D
 -Wcatch-value                          c++
 -Wcatch-value=<0,3>                    c++
+-Wchanges-meaning                      c++
 -Wchar-subscripts                      enabled by -Wall
 -Wcharacter-truncation                 fortran
 -Wchkp                                 deprecated
@@ -95,6 +116,7 @@
 -Wcomment                              enabled by -Wall
 -Wcomments                             alias for -Wcomment
 -Wcompare-reals                                fortran
+-Wcomplain-wrong-lang                  default
 -Wconditionally-supported              c++ and objc++
 -Wconversion                           FIXME maybe? too much noise; encourages 
bad changes
 -Wconversion-extra                     fortran
@@ -107,6 +129,7 @@
 -Wdangling-else                                enabled by -Wparentheses
 -Wdangling-pointer                     enabled by -Wall
 -Wdangling-pointer=<0,2>               enabled by -Wall
+-Wdangling-reference                   c++ and objc++
 -Wdeclaration-after-statement          needed only for pre-C99, so obsolete
 -Wdelete-incomplete                    c++ and objc++
 -Wdelete-non-virtual-dtor              c++
@@ -126,6 +149,7 @@
 -Wempty-body                           enabled by -Wextra
 -Wenum-compare                         enabled by -Wall
 -Wenum-conversion                      enabled by -Wextra
+-Wenum-int-mismatch                    enabled by -Wall
 -Wendif-labels                         default
 -Werror-implicit-function-declaration  deprecated
 -Wexceptions                           c++ and objc++
@@ -173,9 +197,11 @@
 -Winterference-size                    c++
 -Wintrinsic-shadow                     fortran
 -Wintrinsics-std                       fortran
+-Winvalid-constexpr                    c++
 -Winvalid-imported-macros              c++ and objc++
 -Winvalid-memory-model                 default
 -Winvalid-offsetof                     c++ and objc++
+-Winvalid-utf8                         enabled by -finput-charset=UTF-8
 -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?
@@ -228,6 +254,7 @@
 -Wopenacc-parallelism                  OpenACC
 -Woverflow                             default
 -Woverloaded-virtual                   c++
+-Woverloaded-virtual=<0,2>             c++
 -Woverride-init                                enabled by -Wextra
 -Woverride-init-side-effects           c++ and objc++
 -Woverwrite-recursive                  fortran
@@ -263,6 +290,7 @@
 -Wscalar-storage-order                 default
 -Wselector                             objc and objc++
 -Wsequence-point                       enabled by -Wall
+-Wself-move                            c++ and objc++
 -Wshadow-compatible-local              covered by -Wshadow
 -Wshadow-ivar                          objc
 -Wshadow-local                         covered by -Wshadow
@@ -318,6 +346,7 @@
 -Wundef                                        FIXME maybe? too many false 
positives
 -Wundefined-do-loop                    fortran
 -Wunderflow                            fortran
+-Wunicode                              default
 -Wunreachable-code                     obsolescent no-op
 -Wunsuffixed-float-constants           triggers warning in gnulib's timespec.h
 -Wunused                               enabled by -Wall
@@ -345,6 +374,7 @@
 -Wvla-parameter                                enabled by -Wall
 -Wvolatile                             c++ and objc++
 -Wvolatile-register-var                        enabled by -Wall
+-Wxor-used-as-pow                      default
 -Wzero-as-null-pointer-constant                c++ and objc++
 -Wzero-length-bounds                   enabled by -Wall
 -Wzerotrip                             fortran
diff --git a/doc/manywarnings.texi b/doc/manywarnings.texi
index 32237dc67f..ea1b758cc0 100644
--- a/doc/manywarnings.texi
+++ b/doc/manywarnings.texi
@@ -80,6 +80,13 @@ The @code{-fanalyzer} option generates many false alarms 
about
 @code{malloc} leaks, which @code{manywarnings} suppresses by also
 using @option{-Wno-analyzer-malloc-leak}.
 
+@item -fstrict-flex-arrays
+The @code{manywarnings} module by default uses GCC's
+@option{-fstrict-flex-arrays} option if available, so that GCC can
+warn about nonportable usage of flexible array members.
+In a few cases this can help GCC generate better code,
+so it is not strictly a warning option.
+
 @item -Wsign-compare
 GCC and Clang generate too many false alarms with @option{-Wsign-compare},
 and we don't recommend that warning.  You can disable it by using
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
index f88dcc5f12..1d69116ddb 100644
--- a/m4/manywarnings.m4
+++ b/m4/manywarnings.m4
@@ -109,7 +109,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)],
   #  <(LC_ALL=C gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort)
 
   $1=
-  for gl_manywarn_item in -fanalyzer \
+  for gl_manywarn_item in -fanalyzer -fstrict-flex-arrays \
     -Wall \
     -Warith-conversion \
     -Wbad-function-cast \
@@ -137,6 +137,7 @@ AC_DEFUN([gl_MANYWARN_ALL_GCC(C)],
     -Wpointer-arith \
     -Wshadow \
     -Wstack-protector \
+    -Wstrict-flex-arrays \
     -Wstrict-overflow \
     -Wstrict-prototypes \
     -Wsuggest-attribute=cold \
-- 
2.40.0


Reply via email to