From 78f7aef9304979d7796dd7d3fc5a2d92d1da0ca6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 23 Apr 2023 08:53:59 -0700 Subject: 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. --- 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 + 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= 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= 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 \ -- cgit v1.2.1