[libvirt] [PATCH 1/6] Use gnulib's manywarnings & warnings modules

Eric Blake eblake at redhat.com
Mon Apr 4 20:29:06 UTC 2011


On 04/04/2011 10:19 AM, Daniel P. Berrange wrote:
> Remove custom code for checking compiler warnings, using
> gl_WARN_ADD instead. Don't list all flags ourselves, use
> gnulib's gl_MANYWARN_ALL_GCC to get all possible GCC flags,
> then turn off the ones we don't want yet.
> 
> * acinclude.m4: Rewrite to use gl_WARN_ADD and gl_MANYWARN_ALL_GCC
> * bootstrap.conf: Add warnings & manywarnings
> * configure.ac: Switch to gl_WARN_ADD
> * m4/compiler-flags.m4: Obsoleted by gl_WARN_ADD
> ---
>  acinclude.m4         |  158 +++++++++++++++++++++++++++-----------------------
>  bootstrap.conf       |    2 +
>  configure.ac         |   15 +++--
>  m4/compiler-flags.m4 |   48 ---------------
>  4 files changed, 96 insertions(+), 127 deletions(-)
>  delete mode 100644 m4/compiler-flags.m4

> +
> +        # List of warnings that are not relevant / wanted
> +        dontwarn="$dontwarn -Wc++-compat"             # Don't care about C++ compiler compat
> +        dontwarn="$dontwarn -Wtraditional"            # Don't care about ancient C standard compat
> +        dontwarn="$dontwarn -Wtraditional-conversion" # Don't care about ancient C standard compat
> +        dontwarn="$dontwarn -Wsystem-headers"         # Ignore warnings in /usr/include
> +        dontwarn="$dontwarn -Wpadded"                 # Happy for compiler to add struct padding
> +        dontwarn="$dontwarn -Wunreachable-code"       # GCC very confused with -O2
> +        dontwarn="$dontwarn -Wconversion"             # Too many to deal with
> +        dontwarn="$dontwarn -Wsign-conversion"        # Too many to deal with
> +        dontwarn="$dontwarn -Wvla"                    # GNULIB gettext.h violates
> +        dontwarn="$dontwarn -Wundef"                  # Many GNULIB violations
> +        dontwarn="$dontwarn -Wcast-qual"              # Need to allow bad cast for execve()
> +        dontwarn="$dontwarn -Wlong-long"              # We need to use long long in many places
> +        dontwarn="$dontwarn -Wswitch-default"         # We allow manual list of all enum cases without default:
> +        dontwarn="$dontwarn -Wswitch-enum"            # We allow optional default: instead of listing all enum values
> +        dontwarn="$dontwarn -Wstrict-overflow"        # Not a problem since we don't use -fstrict-overflow
> +        dontwarn="$dontwarn -Wunsafe-loop-optimizations" # Not a problem since we don't use -funsafe-loop-optimizations

Seems okay (but long lines - any way to break that into 80 columns?)

> +
> +        # We might fundamentally need some of these disabled forever, but ideally
> +        # we'd turn many of them on
> +        dontwarn="$dontwarn -Wformat-nonliteral"

This one may need to always be disabled, thanks to virAsprintf (it would
be nicer if we could disable for just one or two files, rather than
globally).

> +        dontwarn="$dontwarn -Wfloat-equal"
> +        dontwarn="$dontwarn -Wdeclaration-after-statement"

If gcc would do better, I'd love to guarantee C99 and take advantage of
this (smaller scopes have maintenance benefits) - thus, I envision this
one being permanent (float it up to the earlier set).

> +        dontwarn="$dontwarn -Wcast-qual"
> +        dontwarn="$dontwarn -Wconversion"
> +        dontwarn="$dontwarn -Wsign-conversion"
> +        dontwarn="$dontwarn -Wold-style-definition"
> +        dontwarn="$dontwarn -Wmissing-noreturn"
> +        dontwarn="$dontwarn -Wpacked"
> +        dontwarn="$dontwarn -Wunused-macros"
> +        dontwarn="$dontwarn -Woverlength-strings"
> +        dontwarn="$dontwarn -Wmissing-format-attribute"
> +        dontwarn="$dontwarn -Wstack-protector"

Yes, I agree that the rest of these should be temporary, and are
probably worth fixing.

> +
> +        # Get all possible GCC warnings
> +        gl_MANYWARN_ALL_GCC([maybewarn])
> +
> +        # Remove the ones we don't want, blacklisted earlier
> +        gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn])
> +
> +        # Check for $CC support of each warning
> +        for w in $wantwarn; do
> +          gl_WARN_ADD([$w])
> +        done
> +
> +        # GNULIB uses '-W' which includes a bunch of stuff,
> +        # kinda like -Wextra. Unfortunately, it means you

"kinda like"? Exactly like!  -W was the old spelling, -Wextra was the
new one (added quite some time ago; something like gcc 3.4, off the top
of my head).

> +        # can't simply use '-Wsign-compare' with gl_MANYWARN_COMPLEMENT
> +        # So we have -W enabled, and then have to explicitly turn off
> +        gl_WARN_ADD(-Wno-sign-compare)
> +
> +        # This should be < 256 really, but with PATH_MAX everywhere
> +        # we have doom, even with 4096. In fact we have some functions
> +        # with several PATH_MAX sized variables :-( We should kill off
> +        # all PATH_MAX usage and then lower this limit
> +        gl_WARN_ADD([-Wframe-larger-than=65700])
> +        dnl gl_WARN_ADD([-Wframe-larger-than=4096])
> +        dnl gl_WARN_ADD([-Wframe-larger-than=256])
> +
> +        # Extra special flags
> +        gl_WARN_ADD([-Wp,-D_FORTIFY_SOURCE=2])
> +        dnl Fedora only uses -fstack-protector, but doesn't seem to
> +        dnl be great overhead in adding -fstack-protector-all instead
> +        dnl gl_WARN_ADD([-fstack-protector])
> +        gl_WARN_ADD([-fstack-protector-all])
> +        gl_WARN_ADD([--param=ssp-buffer-size=4])
> +        gl_WARN_ADD([-fexceptions])
> +        gl_WARN_ADD([-fasynchronous-unwind-tables])
> +        gl_WARN_ADD([-fdiagnostics-show-option])
> +
> +        if test "$enable_compile_warnings" = "error"
> +        then
> +          gl_WARN_ADD([-Werror])
> +        fi

Looks like a good conversion.

> @@ -81,6 +82,7 @@ timegm
>  uname
>  useless-if-before-free
>  usleep
> +warnings
>  vasprintf
>  verify
>  vc-list-files

Where did you learn to sort?  :)

> diff --git a/configure.ac b/configure.ac
> index a8d223a..7874c30 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1970,12 +1970,14 @@ AC_ARG_ENABLE([test-coverage],
>  enable_coverage=$enableval
>  
>  if test "${enable_coverage}" = yes; then
> -  COMPILER_FLAGS=
> -  gl_COMPILER_FLAGS(-fprofile-arcs)
> -  gl_COMPILER_FLAGS(-ftest-coverage)
> -  AC_SUBST([COVERAGE_CFLAGS], [$COMPILER_FLAGS])
> -  AC_SUBST([COVERAGE_LDFLAGS], [$COMPILER_FLAGS])
> -  COMPILER_FLAGS=
> +  save_WARN_CFLAGS=$WARN_CFLAGS
> +  WARN_CFLAGS=
> +  gl_WARN_ADD(-fprofile-arcs)
> +  gl_WARN_ADD(-ftest-coverage)

Nit: use consistent m4 quoting: gl_WARN_ADD([-fprofile-arcs])

ACK with nits addressed.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110404/58cf9dd6/attachment-0001.sig>


More information about the libvir-list mailing list