[libvirt PATCH 021/351] meson: add compiler warnings

Peter Krempa pkrempa at redhat.com
Wed Jul 22 08:13:50 UTC 2020


On Thu, Jul 16, 2020 at 11:54:17 +0200, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  config.h                    |   7 +
>  configure.ac                |   3 -
>  m4/virt-compile-warnings.m4 | 255 ------------------------------------
>  m4/virt-warnings.m4         | 115 ----------------
>  meson.build                 | 221 ++++++++++++++++++++++++++++---
>  5 files changed, 211 insertions(+), 390 deletions(-)
>  delete mode 100644 m4/virt-compile-warnings.m4
>  delete mode 100644 m4/virt-warnings.m4
> 
> diff --git a/config.h b/config.h
> index 9c433ad4c0f..368688f3d01 100644
> --- a/config.h
> +++ b/config.h
> @@ -1,5 +1,12 @@
>  #include <meson-config.h>
>  
> +/* Enable compile-time and run-time bounds-checking, and some warnings,
> + * without upsetting newer glibc. */
> +
> +#if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
> +# define _FORTIFY_SOURCE 2
> +#endif
> +
>  #ifndef __GNUC__
>  # error "Libvirt requires GCC >= 4.8, or CLang"
>  #endif
> diff --git a/configure.ac b/configure.ac
> index 8f16b364de6..56a471fc3ab 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -161,7 +161,6 @@ fi
>  
>  # Check for compiler and library settings.
>  
> -LIBVIRT_COMPILE_WARNINGS
>  LIBVIRT_LINKER_RELRO
>  LIBVIRT_LINKER_NO_INDIRECT
>  LIBVIRT_LINKER_NO_UNDEFINED
> @@ -849,8 +848,6 @@ AC_MSG_NOTICE([])
>  AC_MSG_NOTICE([Miscellaneous])
>  AC_MSG_NOTICE([])
>  LIBVIRT_RESULT_DEBUG
> -LIBVIRT_RESULT([Use -Werror], [$enable_werror])
> -LIBVIRT_RESULT([Warning Flags], [$WARN_CFLAGS])
>  LIBVIRT_RESULT_DTRACE
>  LIBVIRT_RESULT_NUMAD
>  LIBVIRT_RESULT_INIT_SCRIPT
> diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
> deleted file mode 100644
> index d3538d59f82..00000000000
> --- a/m4/virt-compile-warnings.m4
> +++ /dev/null
> @@ -1,255 +0,0 @@
> -dnl
> -dnl Enable all known GCC compiler warnings, except for those
> -dnl we can't yet cope with
> -dnl
> -AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
> -    dnl ******************************
> -    dnl More compiler warnings
> -    dnl ******************************
> -
> -    LIBVIRT_ARG_ENABLE([WERROR], [Use -Werror (if supported)], [check])
> -    if test "$enable_werror" = "check"; then
> -        if test -d $srcdir/.git; then
> -            is_git_version=true
> -            enable_werror=yes
> -        else
> -            enable_werror=no
> -        fi
> -    fi
> -
> -    # List of warnings that are not relevant / wanted
> -
> -    # Don't care about C++ compiler compat
> -    dontwarn="$dontwarn -Wc++-compat"
> -    dontwarn="$dontwarn -Wabi"
> -    dontwarn="$dontwarn -Wdeprecated"
> -    # Don't care about ancient C standard compat
> -    dontwarn="$dontwarn -Wtraditional"
> -    # Don't care about ancient C standard compat
> -    dontwarn="$dontwarn -Wtraditional-conversion"
> -    # Ignore warnings in /usr/include
> -    dontwarn="$dontwarn -Wsystem-headers"
> -    # Happy for compiler to add struct padding
> -    dontwarn="$dontwarn -Wpadded"
> -    # GCC very confused with -O2
> -    dontwarn="$dontwarn -Wunreachable-code"
> -    # Too many to deal with
> -    dontwarn="$dontwarn -Wconversion"
> -    # Too many to deal with
> -    dontwarn="$dontwarn -Wsign-conversion"
> -    # Need to allow bad cast for execve()
> -    dontwarn="$dontwarn -Wcast-qual"
> -    # We need to use long long in many places
> -    dontwarn="$dontwarn -Wlong-long"
> -    # We allow manual list of all enum cases without default:
> -    dontwarn="$dontwarn -Wswitch-default"
> -    # Not a problem since we don't use -fstrict-overflow
> -    dontwarn="$dontwarn -Wstrict-overflow"
> -    # Not a problem since we don't use -funsafe-loop-optimizations
> -    dontwarn="$dontwarn -Wunsafe-loop-optimizations"
> -    # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
> -    dontwarn="$dontwarn -Wenum-compare"
> -    # gcc 5.1 -Wformat-signedness mishandles enums, not ready for prime time
> -    dontwarn="$dontwarn -Wformat-signedness"
> -    # Several conditionals expand the same on both branches
> -    # depending on the particular platform/architecture
> -    dontwarn="$dontwarn -Wduplicated-branches"
> -    # > This warning does not generally indicate that there is anything wrong
> -    # > with your code; it merely indicates that GCC's optimizers are unable
> -    # > to handle the code effectively.
> -    # Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
> -    dontwarn="$dontwarn -Wdisabled-optimization"
> -    # Various valid glib APIs/macros trigger this warning
> -    dontwarn="$dontwarn -Wbad-function-cast"
> -
> -    # Broken in 6.0 and later
> -    #     https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69602
> -    AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op],
> -      [lv_cv_gcc_wlogical_op_equal_expr_broken], [
> -        save_CFLAGS="$CFLAGS"
> -        CFLAGS="-O2 -Wlogical-op -Werror"
> -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> -          #define TEST1 1
> -          #define TEST2 TEST1
> -        ]], [[
> -          int test = 0;
> -          return test == TEST1 || test == TEST2;]])],
> -        [lv_cv_gcc_wlogical_op_equal_expr_broken=no],
> -        [lv_cv_gcc_wlogical_op_equal_expr_broken=yes])
> -        CFLAGS="$save_CFLAGS"])
> -
> -    AC_CACHE_CHECK([whether clang gives bogus warnings for -Wdouble-promotion],
> -      [lv_cv_clang_double_promotion_broken], [
> -        save_CFLAGS="$CFLAGS"
> -        CFLAGS="-O2 -Wdouble-promotion -Werror"
> -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> -          #include <math.h>
> -        ]], [[
> -          float f = 0.0;
> -	  return isnan(f);]])],
> -        [lv_cv_clang_double_promotion_broken=no],
> -        [lv_cv_clang_double_promotion_broken=yes])
> -        CFLAGS="$save_CFLAGS"])
> -
> -    if test "$lv_cv_clang_double_promotion_broken" = "yes";
> -    then
> -      dontwarn="$dontwarn -Wdouble-promotion"
> -    fi
> -
> -    # Clang complains about unused static inline functions
> -    # which are common with G_DEFINE_AUTOPTR_CLEANUP_FUNC
> -    AC_CACHE_CHECK([whether clang gives bogus warnings for -Wunused-function],
> -      [lv_cv_clang_unused_function_broken], [
> -        save_CFLAGS="$CFLAGS"
> -        CFLAGS="-Wunused-function -Werror"
> -        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
> -           static inline void foo(void) {}
> -        ]], [[
> -          return 0]])],
> -        [lv_cv_clang_unused_function_broken=no],
> -        [lv_cv_clang_unused_function_broken=yes])
> -        CFLAGS="$save_CFLAGS"])
> -
> -    # We might fundamentally need some of these disabled forever, but
> -    # ideally we'd turn many of them on
> -    dontwarn="$dontwarn -Wfloat-equal"
> -    dontwarn="$dontwarn -Wdeclaration-after-statement"
> -    dontwarn="$dontwarn -Wpacked"
> -    dontwarn="$dontwarn -Wunused-macros"
> -    dontwarn="$dontwarn -Woverlength-strings"
> -    dontwarn="$dontwarn -Wstack-protector"
> -    dontwarn="$dontwarn -Wsuggest-attribute=malloc"
> -
> -    # 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])
> -
> -    # -Wunused-functin is implied by -Wall we must turn it
> -    # off explicitly.
> -    if test "$lv_cv_clang_unused_function_broken" = "yes";
> -    then
> -      wantwarn="$wantwarn -Wno-unused-function"
> -    fi
> -
> -    # manywarnings uses '-W' (aka -Wextra) which includes a bunch of stuff.
> -    # Unfortunately, this means you can't simply use '-Wsign-compare'
> -    # with gl_MANYWARN_COMPLEMENT
> -    # So we have -W enabled, and then have to explicitly turn off...
> -    wantwarn="$wantwarn -Wno-sign-compare"
> -    # We do "bad" function casts all the time for event callbacks
> -    wantwarn="$wantwarn -Wno-cast-function-type"
> -
> -    # CLang incorrectly complains about dup typedefs win gnu99 mode
> -    # so use this CLang-specific arg to keep it quiet
> -    wantwarn="$wantwarn -Wno-typedef-redefinition"
> -
> -    # manywarnings expects this to be part of -Wc++-compat, but we turn
> -    # that one off, so we need to manually enable this again
> -    wantwarn="$wantwarn -Wjump-misses-init"
> -
> -    # manywarnings explicitly filters it out, preferring -Wswitch
> -    # but that doesn't report missing enums if a default:
> -    # is present.
> -    wantwarn="$wantwarn -Wswitch-enum"
> -
> -    # manywarnings turns on -Wformat=2 which implies -Wformat-nonliteral,
> -    # so we need to manually re-exclude it.
> -    wantwarn="$wantwarn -Wno-format-nonliteral"
> -
> -    # -Wformat enables this by default, and we should keep it,
> -    # but need to rewrite various areas of code first
> -    wantwarn="$wantwarn -Wno-format-truncation"
> -
> -    # This should be < 256 really. Currently we're down to 4096,
> -    # but using 1024 bytes sized buffers (mostly for virStrerror)
> -    # stops us from going down further
> -    wantwarn="$wantwarn -Wframe-larger-than=4096"
> -    gl_WARN_ADD([-Wframe-larger-than=262144], [RELAXED_FRAME_LIMIT_CFLAGS])
> -
> -    # Extra special flags
> -    dnl -fstack-protector stuff passes gl_WARN_ADD with gcc
> -    dnl on Mingw32, but fails when actually used
> -    case $host in
> -       aarch64-*-*)
> -       dnl "error: -fstack-protector not supported for this target [-Werror]"
> -       ;;
> -       *-*-linux*)
> -       dnl Prefer -fstack-protector-strong if it's available.
> -       dnl There doesn't seem to be great overhead in adding
> -       dnl -fstack-protector-all instead of -fstack-protector.
> -       dnl
> -       dnl We also don't need ssp-buffer-size with -all or -strong,
> -       dnl since functions are protected regardless of buffer size.
> -       dnl wantwarn="$wantwarn --param=ssp-buffer-size=4"
> -       wantwarn="$wantwarn -fstack-protector-strong"
> -       ;;
> -       *-*-freebsd*)
> -       dnl FreeBSD ships old gcc 4.2.1 which doesn't handle
> -       dnl -fstack-protector-all well
> -       wantwarn="$wantwarn -fstack-protector"
> -
> -       wantwarn="$wantwarn -Wno-unused-command-line-argument"
> -       ;;
> -    esac
> -    wantwarn="$wantwarn -fexceptions"
> -    wantwarn="$wantwarn -fasynchronous-unwind-tables"
> -
> -    # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
> -    # fire even without -O.
> -    wantwarn="$wantwarn -fipa-pure-const"
> -    # We should eventually enable this, but right now there are at
> -    # least 75 functions triggering warnings.
> -    wantwarn="$wantwarn -Wno-suggest-attribute=pure"
> -    wantwarn="$wantwarn -Wno-suggest-attribute=const"
> -
> -    if test "$enable_werror" = "yes"
> -    then
> -      wantwarn="$wantwarn -Werror"
> -    fi
> -
> -    # Request the gnu99 standard which is the best choice with
> -    # gcc 4.8.0. Not a warning flag, but the probing mechanism
> -    # is convenient
> -    wantwarn="$wantwarn -std=gnu99"
> -
> -    # Check for $CC support of each warning
> -    for w in $wantwarn; do
> -      gl_WARN_ADD([$w])
> -    done
> -
> -    case $host in
> -        *-*-linux*)
> -        dnl Fall back to -fstack-protector-all if -strong is not available
> -        case $WARN_CFLAGS in
> -        *-fstack-protector-strong*)
> -        ;;
> -        *)
> -            gl_WARN_ADD([-fstack-protector-all])
> -        ;;
> -        esac
> -        ;;
> -    esac
> -
> -    case $WARN_CFLAGS in
> -        *-Wsuggest-attribute=format*)
> -           AC_DEFINE([HAVE_SUGGEST_ATTRIBUTE_FORMAT], [1], [Whether -Wsuggest-attribute=format works])
> -        ;;
> -    esac
> -
> -    # Use security checked glibc headers
> -    AH_VERBATIM([FORTIFY_SOURCE],
> -    [/* Enable compile-time and run-time bounds-checking, and some warnings,
> -        without upsetting newer glibc. */
> -     #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
> -     # define _FORTIFY_SOURCE 2
> -     #endif
> -    ])
> -
> -    if test "$gl_cv_warn_c__Wlogical_op" = yes &&
> -       test "$lv_cv_gcc_wlogical_op_equal_expr_broken" = yes; then
> -      AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP_EQUAL_EXPR], 1,
> -        [Define to 1 if gcc -Wlogical-op reports false positive 'or' equal expr])
> -    fi
> -])
> diff --git a/m4/virt-warnings.m4 b/m4/virt-warnings.m4
> deleted file mode 100644
> index d272365f0a1..00000000000
> --- a/m4/virt-warnings.m4
> +++ /dev/null
> @@ -1,115 +0,0 @@
> -# warnings.m4 serial 14
> -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,
> -dnl with or without modifications, as long as this notice is preserved.
> -
> -dnl From Simon Josefsson
> -
> -# gl_AS_VAR_APPEND(VAR, VALUE)
> -# ----------------------------
> -# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
> -m4_ifdef([AS_VAR_APPEND],
> -[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
> -[m4_define([gl_AS_VAR_APPEND],
> -[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
> -
> -
> -# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
> -#                       [PROGRAM = AC_LANG_PROGRAM()])
> -# -----------------------------------------------------------------
> -# Check if the compiler supports OPTION when compiling PROGRAM.
> -#
> -# The effects of this macro depend on the current language (_AC_LANG).
> -AC_DEFUN([gl_COMPILER_OPTION_IF],
> -[
> -dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf
> -dnl 2.64 or newer.
> -AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
> -AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
> -AS_LITERAL_IF([$1],
> -  [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
> -  [gl_positive="$1"
> -case $gl_positive in
> -  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
> -esac
> -m4_pushdef([gl_Positive], [$gl_positive])])dnl
> -AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
> -  gl_save_compiler_FLAGS="$gl_Flags"
> -  gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
> -    [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
> -  AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
> -                 [AS_VAR_SET(gl_Warn, [yes])],
> -                 [AS_VAR_SET(gl_Warn, [no])])
> -  gl_Flags="$gl_save_compiler_FLAGS"
> -])
> -AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
> -m4_popdef([gl_Positive])dnl
> -AS_VAR_POPDEF([gl_Flags])dnl
> -AS_VAR_POPDEF([gl_Warn])dnl
> -])
> -
> -# gl_UNKNOWN_WARNINGS_ARE_ERRORS
> -# ------------------------------
> -# Clang doesn't complain about unknown warning options unless one also
> -# specifies -Wunknown-warning-option -Werror.  Detect this.
> -#
> -# The effects of this macro depend on the current language (_AC_LANG).
> -AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
> -[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
> -
> -# Specialization for _AC_LANG = C. This macro can be AC_REQUIREd.
> -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
> -m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)],
> -[
> -  AC_LANG_PUSH([C])
> -  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
> -  AC_LANG_POP([C])
> -])
> -
> -# Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd.
> -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
> -m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)],
> -[
> -  AC_LANG_PUSH([C++])
> -  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
> -  AC_LANG_POP([C++])
> -])
> -
> -# Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd.
> -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
> -m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)],
> -[
> -  AC_LANG_PUSH([Objective C])
> -  gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
> -  AC_LANG_POP([Objective C])
> -])
> -
> -AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL],
> -[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
> -   [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
> -   [gl_unknown_warnings_are_errors=])])
> -
> -# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS],
> -#             [PROGRAM = AC_LANG_PROGRAM()])
> -# -----------------------------------------------------------
> -# Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it
> -# when compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
> -#
> -# If VARIABLE is a variable name, AC_SUBST it.
> -#
> -# The effects of this macro depend on the current language (_AC_LANG).
> -AC_DEFUN([gl_WARN_ADD],
> -[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)])
> -gl_COMPILER_OPTION_IF([$1],
> -  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])],
> -  [],
> -  [$3])
> -m4_ifval([$2],
> -         [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
> -         [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl
> -])
> -
> -# Local Variables:
> -# mode: autoconf
> -# End:
> diff --git a/meson.build b/meson.build
> index d9a95e049c0..2450a8bdd79 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -7,6 +7,7 @@ project(
>          'buildtype=debugoptimized',
>          'b_pie=true',
>          'c_std=gnu99',
> +        'warning_level=2',
>      ],
>  )
>  
> @@ -212,10 +213,8 @@ cc_flags = [
>    '-Waddress',
>    '-Waddress-of-packed-member',
>    '-Waggressive-loop-optimizations',
> -  '-Wall',
>    '-Wattribute-warning',
>    '-Wattributes',
> -  '-Wbad-function-cast',
>    '-Wbool-compare',
>    '-Wbool-operation',
>    '-Wbuiltin-declaration-mismatch',
> @@ -232,27 +231,20 @@ cc_flags = [
>    '-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',
>    '-Wexpansion-to-defined',
> -  '-Wextra',
>    '-Wformat-contains-nul',
>    '-Wformat-extra-args',
>    '-Wformat-nonliteral',
>    '-Wformat-security',
> -  '-Wformat-signedness',
>    '-Wformat-y2k',
>    '-Wformat-zero-length',
>    '-Wframe-address',
> @@ -299,9 +291,7 @@ cc_flags = [
>    '-Wold-style-definition',
>    '-Wopenmp-simd',
>    '-Woverflow',
> -  '-Woverlength-strings',
>    '-Woverride-init',
> -  '-Wpacked',
>    '-Wpacked-bitfield-compat',
>    '-Wpacked-not-aligned',
>    '-Wparentheses',
> @@ -323,15 +313,12 @@ cc_flags = [
>    '-Wsizeof-array-argument',
>    '-Wsizeof-pointer-div',
>    '-Wsizeof-pointer-memaccess',
> -  '-Wstack-protector',
>    '-Wstrict-aliasing',
> -  '-Wstrict-overflow',
>    '-Wstrict-prototypes',
>    '-Wstringop-truncation',
>    '-Wsuggest-attribute=cold',
>    '-Wsuggest-attribute=const',
>    '-Wsuggest-attribute=format',
> -  '-Wsuggest-attribute=malloc',
>    '-Wsuggest-attribute=noreturn',
>    '-Wsuggest-attribute=pure',
>    '-Wsuggest-final-methods',
> @@ -340,21 +327,18 @@ cc_flags = [
>    '-Wswitch-bool',
>    '-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',
> @@ -392,6 +376,203 @@ cc_flags += [
>    '-Wvla-larger-then=4031',
>  ]
>  
> +cc_flags += [
> +  # So we have -W enabled, and then have to explicitly turn off...
> +  '-Wno-sign-compare',
> +
> +  # We do "bad" function casts all the time for event callbacks
> +  '-Wno-cast-function-type',
> +
> +  # CLang incorrectly complains about dup typedefs win gnu99 mode
> +  # so use this CLang-specific arg to keep it quiet
> +  '-Wno-typedef-redefinition',
> +
> +  # We don't use -Wc++-compat so we have to enable it explicitly
> +  '-Wjump-misses-init',
> +
> +  # TODO comment
> +  '-Wswitch-enum',

TODO: fix all TODOs

> +
> +  # -Wformat=2 implies -Wformat-nonliteral so we need to manually exclude it
> +  '-Wno-format-nonliteral',
> +
> +  # -Wformat enables this by default, and we should keep it,
> +  # but need to rewrite various areas of code first
> +  '-Wno-format-truncation',
> +
> +  # This should be < 256 really. Currently we're down to 4096,
> +  # but using 1024 bytes sized buffers (mostly for virStrerror)
> +  # stops us from going down further
> +  '-Wframe-larger-than=4096',
> +
> +  # extra special flags
> +  '-fexceptions',
> +  '-fasynchronous-unwind-tables',
> +
> +  # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
> +  # fire even without -O.
> +  '-fipa-pure-const',
> +
> +  # We should eventually enable this, but right now there are at
> +  # least 75 functions triggering warnings.
> +  '-Wno-suggest-attribute=pure',
> +  '-Wno-suggest-attribute=const',
> +]
> +
> +if git
> +  cc_flags += [ '-Werror' ]
> +endif

This doesn't seem right. We definitely don't want this to be based
solely on whether we're building from git.





More information about the libvir-list mailing list