mirror of https://gitee.com/openkylin/libvirt.git
m4: enforce that all enum cases are listed in switch statements
As a general rule any time we switch() on something that is an enum, we want to have a case for every enum constant. The -Wswitch warning will report any switch where we've violated this rule, except if that switch has a default case. Unfortunately it is reasonable to want to list all enum constants *and* also have a default case. To get a warning in that scenario requires that we turn on -Wswitch-enum. In a few cases where we explicitly don't want to list all enum cases, we can discard the enum type checking by casting the value to a plain int. Reviewed-by: John Ferlan <jferlan@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
e694adf8ca
commit
67966ad518
|
@ -47,8 +47,6 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
|
|||
dontwarn="$dontwarn -Wlong-long"
|
||||
# We allow manual list of all enum cases without default:
|
||||
dontwarn="$dontwarn -Wswitch-default"
|
||||
# We allow optional default: instead of listing all enum values
|
||||
dontwarn="$dontwarn -Wswitch-enum"
|
||||
# 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
|
||||
|
@ -184,6 +182,11 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
|
|||
# that one off, so we need to manually enable this again
|
||||
wantwarn="$wantwarn -Wjump-misses-init"
|
||||
|
||||
# GNULIB explicitly filters it out, preferring -Wswitch
|
||||
# but that doesn't report missing enums if a default:
|
||||
# is present.
|
||||
wantwarn="$wantwarn -Wswitch-enum"
|
||||
|
||||
# GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral,
|
||||
# so we need to manually re-exclude it. Also, older gcc 4.2
|
||||
# added an implied ATTRIBUTE_NONNULL on any parameter marked
|
||||
|
|
Loading…
Reference in New Issue