From d46d729c0c54846830dec58dfe8fce68fefbf852 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 24 Aug 2024 08:28:18 -0700 Subject: [PATCH] Change manywarnings usage to be more like coreutils * configure.ac: Treat --enable-gcc-warnings more like coreutils does. This mostly just migrates coreutils changes into this file. --- configure.ac | 59 +++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/configure.ac b/configure.ac index d51767c..b059c9a 100644 --- a/configure.ac +++ b/configure.ac @@ -44,22 +44,30 @@ gl_INIT AM_PROG_AR AC_ARG_ENABLE([gcc-warnings], - [AS_HELP_STRING([--enable-gcc-warnings], - [turn on lots of GCC warnings (for developers)])], + [AS_HELP_STRING([--enable-gcc-warnings@<:@=TYPE@:>@], + [control generation of GCC warnings. The TYPE 'no' disables + warnings (default for non-developer builds); 'yes' generates + cheap warnings if available; + 'expensive' in addition generates expensive-to-compute warnings + if available.])], [case $enableval in - yes|no) ;; + no|yes|expensive) ;; *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; esac - gl_gcc_warnings=$enableval], - [gl_gcc_warnings=no] + gl_gcc_warnings=$enableval] ) -if test "$gl_gcc_warnings" = yes; then +if test $gl_gcc_warnings != no; then gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) AC_SUBST([WERROR_CFLAGS]) - nw= + ew= + AS_IF([test $gl_gcc_warnings != expensive], + [# -fanalyzer and related options slow GCC considerably. + ew="$ew -fanalyzer -Wno-analyzer-malloc-leak"]) + # This, $nw, is the list of warnings we disable. + nw=$ew nw="$nw -Wdeclaration-after-statement" # too useful to forbid nw="$nw -Waggregate-return" # anachronistic nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h) @@ -74,40 +82,28 @@ if test "$gl_gcc_warnings" = yes; then nw="$nw -Wunreachable-code" # Too many warnings for now nw="$nw -Wpadded" # Our structs are not padded nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat - nw="$nw -Wlogical-op" # any use of fwrite provokes this nw="$nw -Wformat-nonliteral" # who.c and pinky.c strftime uses - nw="$nw -Wvla" # warnings in gettext.h nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__ nw="$nw -Wswitch-enum" # Too many warnings for now nw="$nw -Wswitch-default" # Too many warnings for now nw="$nw -Wstack-protector" # not worth working around - nw="$nw -Wmissing-format-attribute" # not worth working around in patch - nw="$nw -Wsuggest-attribute=format" # warns about util.c - # things to fix soon: - nw="$nw -Wshadow" - nw="$nw -Wstrict-overflow" - nw="$nw -Wunsafe-loop-optimizations" -# nw="$nw -Wfloat-equal" # sort.c, seq.c -# nw="$nw -Wmissing-format-attribute" # copy.c nw="$nw -Winline" # It's OK for a compiler to not inline. - # ?? -Wstrict-overflow + + # Using -Wstrict-overflow is a pain, but the alternative is worse. + # For an example, see the code that provoked this report: + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=33498 + # Code like that still infloops with gcc-4.6.0 and -O2. Scary indeed. gl_MANYWARN_ALL_GCC([ws]) gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw]) for w in $ws; do gl_WARN_ADD([$w]) done - gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now - - # In spite of excluding -Wlogical-op above, it is enabled, as of - # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c - gl_WARN_ADD([-Wno-logical-op]) + gl_WARN_ADD([-Wno-format-nonliteral]) gl_WARN_ADD([-fdiagnostics-show-option]) - gl_WARN_ADD([-funit-at-a-time]) - gl_WARN_ADD([-Wno-format-nonliteral]) AC_SUBST([WARN_CFLAGS]) @@ -123,22 +119,19 @@ if test "$gl_gcc_warnings" = yes; then # We use a slightly smaller set of warning options for lib/. # Remove the following and save the result in GNULIB_WARN_CFLAGS. - nw= + nw=$ew nw="$nw -Wuninitialized" nw="$nw -Wunused-macros" nw="$nw -Wmissing-prototypes" nw="$nw -Wold-style-definition" gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) AC_SUBST([GNULIB_WARN_CFLAGS]) - - # For gnulib-tests, the set is slightly smaller still. - nw= - nw="$nw -Wstrict-prototypes" - gl_MANYWARN_COMPLEMENT([GNULIB_TEST_WARN_CFLAGS], - [$GNULIB_WARN_CFLAGS], [$nw]) - AC_SUBST([GNULIB_TEST_WARN_CFLAGS]) fi +# Ensure VLAs are not used. +# Note -Wvla is implicitly added by gl_MANYWARN_ALL_GCC +AC_DEFINE([GNULIB_NO_VLA], [1], [Define to 1 to disable use of VLAs]) + AC_TYPE_MODE_T AC_TYPE_OFF_T