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(a)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(a)'.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(a)'.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