mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
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"
|
dontwarn="$dontwarn -Wlong-long"
|
||||||
# We allow manual list of all enum cases without default:
|
# We allow manual list of all enum cases without default:
|
||||||
dontwarn="$dontwarn -Wswitch-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
|
# Not a problem since we don't use -fstrict-overflow
|
||||||
dontwarn="$dontwarn -Wstrict-overflow"
|
dontwarn="$dontwarn -Wstrict-overflow"
|
||||||
# Not a problem since we don't use -funsafe-loop-optimizations
|
# 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
|
# that one off, so we need to manually enable this again
|
||||||
wantwarn="$wantwarn -Wjump-misses-init"
|
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,
|
# GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral,
|
||||||
# so we need to manually re-exclude it. Also, older gcc 4.2
|
# so we need to manually re-exclude it. Also, older gcc 4.2
|
||||||
# added an implied ATTRIBUTE_NONNULL on any parameter marked
|
# added an implied ATTRIBUTE_NONNULL on any parameter marked
|
||||||
|
Loading…
Reference in New Issue
Block a user