[libvirt] [PATCH 4/4] Add ATTRIBUTE_FALLTHROUGH for switch cases without break
Eric Blake
eblake at redhat.com
Wed Feb 22 20:49:12 UTC 2017
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170222/b7f5afd9/attachment-0001.sig>
More information about the libvir-list
mailing list