[libvirt PATCH 3/6] meson: merge all cc_flags arrays into one
Pavel Hrdina
phrdina at redhat.com
Thu Apr 8 11:30:18 UTC 2021
On Thu, Apr 08, 2021 at 11:58:20AM +0100, Daniel P. Berrangé wrote:
> The split of arrays is fairly arbitrary and a hang over from the way we
> had to structure lists of flags when we used GNULIB's compiler flag
> checking m4 logic.
>
> The separate lists leads to cases where we enable a flag in one list and
> have contradictory setting in another list, which leads to confusion.
>
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
> meson.build | 116 +++++++++++++++++++---------------------------------
> 1 file changed, 43 insertions(+), 73 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 97d9c52165..55dde6d963 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -211,7 +211,23 @@ if git_werror.enabled() or git_werror.auto() and git
> cc_flags += [ '-Werror' ]
> endif
>
> +
> +# gcc --help=warnings outputs
> +ptrdiff_max = cc.sizeof('ptrdiff_t', prefix: '#include <stddef.h>')
> +size_max = cc.sizeof('size_t', prefix: '#include <stdint.h>')
> +# Compute max safe object size by checking ptrdiff_t and size_t sizes.
> +# Ideally we would get PTRDIFF_MAX and SIZE_MAX values but it would
> +# give us (2147483647L) and we would have to remove the () and the suffix
> +# in order to convert it to numbers to be able to pick the smaller one.
> +alloc_max = run_command(
> + 'python3', '-c',
> + 'print(min(2**(@0@ * 8 - 1) - 1, 2**(@1@ * 8) - 1))'.format(ptrdiff_max, size_max),
> +)
> +
> cc_flags += [
> + '-fasynchronous-unwind-tables',
> + '-fexceptions',
> + '-fipa-pure-const',
> '-fno-common',
> '-W',
> '-Wabsolute-value',
> @@ -219,6 +235,9 @@ cc_flags += [
> '-Waddress-of-packed-member',
> '-Waggressive-loop-optimizations',
> '-Wall',
> + '-Walloc-size-larger-than=@0@'.format(alloc_max.stdout().strip()),
> + '-Warray-bounds=2',
> + '-Wattribute-alias=2',
> '-Wattribute-warning',
> '-Wattributes',
> '-Wbool-compare',
> @@ -228,7 +247,8 @@ cc_flags += [
> '-Wcannot-profile',
> '-Wcast-align',
> '-Wcast-align=strict',
> - '-Wcast-function-type',
> + # We do "bad" function casts all the time for event callbacks
> + '-Wno-cast-function-type',
> '-Wchar-subscripts',
> '-Wclobbered',
> '-Wcomment',
> @@ -251,17 +271,24 @@ cc_flags += [
> '-Wextra',
> '-Wformat-contains-nul',
> '-Wformat-extra-args',
> - '-Wformat-nonliteral',
> + # -Wformat=2 implies -Wformat-nonliteral so we need to manually exclude it
> + '-Wno-format-nonliteral',
> + '-Wformat-overflow=2',
> '-Wformat-security',
> + # -Wformat enables this by default, and we should keep it,
> + # but need to rewrite various areas of code first
> + '-Wno-format-truncation',
> '-Wformat-y2k',
> '-Wformat-zero-length',
> '-Wframe-address',
I would keep the comment here as well.
# 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',
> '-Wfree-nonheap-object',
> '-Whsa',
> '-Wif-not-aligned',
> '-Wignored-attributes',
> '-Wignored-qualifiers',
> '-Wimplicit',
> + '-Wimplicit-fallthrough=5',
> '-Wimplicit-function-declaration',
> '-Wimplicit-int',
> '-Wincompatible-pointer-types',
> @@ -272,6 +299,7 @@ cc_flags += [
> '-Wint-to-pointer-cast',
> '-Winvalid-memory-model',
> '-Winvalid-pch',
> + '-Wjump-misses-init',
> '-Wlogical-not-parentheses',
> '-Wlogical-op',
> '-Wmain',
> @@ -293,6 +321,7 @@ cc_flags += [
> '-Wnested-externs',
> '-Wnonnull',
> '-Wnonnull-compare',
> + '-Wnormalized=nfc',
> '-Wnull-dereference',
> '-Wodr',
> '-Wold-style-declaration',
> @@ -318,32 +347,41 @@ cc_flags += [
> '-Wshift-count-negative',
> '-Wshift-count-overflow',
> '-Wshift-negative-value',
> + '-Wshift-overflow=2',
> + # So we have -W enabled, and then have to explicitly turn off...
> + '-Wno-sign-compare',
> '-Wsizeof-array-argument',
> '-Wsizeof-pointer-div',
> '-Wsizeof-pointer-memaccess',
> '-Wstrict-aliasing',
> '-Wstrict-prototypes',
> + '-Wstringop-overflow=2',
> '-Wstringop-truncation',
> '-Wsuggest-attribute=cold',
> - '-Wsuggest-attribute=const',
> + '-Wno-suggest-attribute=const',
> '-Wsuggest-attribute=format',
> '-Wsuggest-attribute=noreturn',
> - '-Wsuggest-attribute=pure',
> + '-Wno-suggest-attribute=pure',
> '-Wsuggest-final-methods',
> '-Wsuggest-final-types',
> '-Wswitch',
> '-Wswitch-bool',
> + '-Wswitch-enum',
> '-Wswitch-unreachable',
> '-Wsync-nand',
> '-Wtautological-compare',
> '-Wtrampolines',
> '-Wtrigraphs',
> '-Wtype-limits',
> + # Clang incorrectly complains about dup typedefs win gnu99 mode
> + # so use this Clang-specific arg to keep it quiet
> + '-Wno-typedef-redefinition',
> '-Wuninitialized',
> '-Wunknown-pragmas',
> '-Wunused',
> '-Wunused-but-set-parameter',
> '-Wunused-but-set-variable',
> + '-Wunused-const-variable=2',
> '-Wunused-function',
> '-Wunused-label',
> '-Wunused-local-typedefs',
> @@ -355,79 +393,11 @@ cc_flags += [
> '-Wvariadic-macros',
> '-Wvector-operation-performance',
> '-Wvla',
> + '-Wvla-larger-then=4031',
> '-Wvolatile-register-var',
> '-Wwrite-strings',
> ]
>
> -# gcc --help=warnings outputs
> -ptrdiff_max = cc.sizeof('ptrdiff_t', prefix: '#include <stddef.h>')
> -size_max = cc.sizeof('size_t', prefix: '#include <stdint.h>')
> -# Compute max safe object size by checking ptrdiff_t and size_t sizes.
> -# Ideally we would get PTRDIFF_MAX and SIZE_MAX values but it would
> -# give us (2147483647L) and we would have to remove the () and the suffix
> -# in order to convert it to numbers to be able to pick the smaller one.
> -alloc_max = run_command(
> - 'python3', '-c',
> - 'print(min(2**(@0@ * 8 - 1) - 1, 2**(@1@ * 8) - 1))'.format(ptrdiff_max, size_max),
> -)
> -cc_flags += [
> - '-Walloc-size-larger-than=@0@'.format(alloc_max.stdout().strip()),
> - '-Warray-bounds=2',
> - '-Wattribute-alias=2',
> - '-Wformat-overflow=2',
> - '-Wformat-truncation=2',
> - '-Wimplicit-fallthrough=5',
> - '-Wnormalized=nfc',
> - '-Wshift-overflow=2',
> - '-Wstringop-overflow=2',
> - '-Wunused-const-variable=2',
> - '-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',
> -
> - # -Wswitch is enabled but that doesn't report missing enums if a default:
> - # is present
> - '-Wswitch-enum',
> -
> - # -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',
> -]
> -
> # on aarch64 error: -fstack-protector not supported for this target
> if host_machine.cpu_family() != 'aarch64'
> if host_machine.system() in [ 'linux', 'freebsd', 'windows' ]
> --
> 2.30.2
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210408/a570e75c/attachment-0001.sig>
More information about the libvir-list
mailing list