[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