
On 02/22/2017 11:52 AM, Daniel P. Berrange wrote:
In GCC 7 there is a new warning triggered when a switch case has a conditional statement (eg if ... else...) and some of the code paths fallthrough to the next switch statement. e.g.
conf/domain_conf.c: In function 'virDomainChrEquals': conf/domain_conf.c:14926:12: error: this statement may fall through [-Werror=implicit-fallthrough=] if (src->targetTypeAttr != tgt->targetTypeAttr) ^
+++ b/src/conf/domain_conf.c @@ -14925,7 +14925,12 @@ virDomainChrEquals(virDomainChrDefPtr src, case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL: if (src->targetTypeAttr != tgt->targetTypeAttr) return false; + + ATTRIBUTE_FALLTHROUGH; +
I understand this one...
case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE: + ATTRIBUTE_FALLTHROUGH; + case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL:
...but was this one necessary, or is gcc smart enough to know that two consecutive labels never needs an explicit fallthrough? Also, is it sufficient to spell it: /* fall through */ so that Coverity can also recognize it? Or does gcc not recognize the magic comment?
+++ b/src/internal.h @@ -218,6 +218,10 @@ # endif # endif
+# ifndef ATTRIBUTE_FALLTHROUGH +# define ATTRIBUTE_FALLTHROUGH __attribute__((fallthrough)) +# endif
If the magic /* fall through */ comment is sufficient, then we don't need this macro.
+++ b/src/lxc/lxc_container.c @@ -2042,7 +2042,7 @@ static int lxcContainerDropCapabilities(virDomainDefPtr def, default: /* User specified capabilities to drop */ toDrop = (state == VIR_TRISTATE_SWITCH_OFF); } - /* Fallthrough */ + ATTRIBUTE_FALLTHROUGH;
Hmm - this argues at least one comment spelling that gcc does not recognize.
+++ b/tools/virsh-edit.c @@ -140,7 +140,7 @@ do { goto redefine; break; } - /* fall-through */ + ATTRIBUTE_FALLTHROUGH; #endif
and another. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org