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é <berra...@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 >
signature.asc
Description: PGP signature