[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 0/3] add QEMU_WARN_NONNULL_ARGS() macro
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [RFC PATCH 0/3] add QEMU_WARN_NONNULL_ARGS() macro |
Date: |
Wed, 17 Jan 2018 09:45:12 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
On 01/17/2018 09:36 AM, Richard Henderson wrote:
> On 01/17/2018 05:18 AM, Philippe Mathieu-Daudé wrote:
>> BTW another useful macro for the static analizer I used is:
>>
>> #define QEMU_FALLTHROUGH __attribute__((fallthrough))
>>
>> It replaces the /* fall through */ comment, i.e.:
>
> That's unfortunate. Does it help if you use the actual lint spelling of /*
> FALLTHRU */?
New gcc has this:
'-Wimplicit-fallthrough=N'
Warn when a switch case falls through. For example:
...
Since there are occasions where a switch case fall through is
desirable, GCC provides an attribute, '__attribute__
((fallthrough))', that is to be used along with a null statement to
suppress this warning that would normally occur:
switch (cond)
{
case 1:
bar (0);
__attribute__ ((fallthrough));
default:
...
}
C++17 provides a standard way to suppress the
'-Wimplicit-fallthrough' warning using '[[fallthrough]];' instead
of the GNU attribute. In C++11 or C++14 users can use
'[[gnu::fallthrough]];', which is a GNU extension. Instead of the
these attributes, it is also possible to add a fallthrough comment
to silence the warning. The whole body of the C or C++ style
comment should match the given regular expressions listed below.
The option argument N specifies what kind of comments are accepted:
* '-Wimplicit-fallthrough=0' disables the warning altogether.
* '-Wimplicit-fallthrough=1' matches '.*' regular expression,
any comment is used as fallthrough comment.
* '-Wimplicit-fallthrough=2' case insensitively matches
'.*falls?[ \t-]*thr(ough|u).*' regular expression.
* '-Wimplicit-fallthrough=3' case sensitively matches one of the
following regular expressions:
* '-fallthrough'
* '@fallthrough@'
* 'lint -fallthrough[ \t]*'
* '[ \t.!]*(ELSE,? |INTENTIONAL(LY)? )?
FALL(S | |-)?THR(OUGH|U)[ \t.!]*(-[^\n\r]*)?'
* '[ \t.!]*(Else,? |Intentional(ly)? )?
Fall((s | |-)[Tt]|t)hr(ough|u)[ \t.!]*(-[^\n\r]*)?'
* '[ \t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?
fall(s | |-)?thr(ough|u)[ \t.!]*(-[^\n\r]*)?'
* '-Wimplicit-fallthrough=4' case sensitively matches one of the
following regular expressions:
* '-fallthrough'
* '@fallthrough@'
* 'lint -fallthrough[ \t]*'
* '[ \t]*FALLTHR(OUGH|U)[ \t]*'
* '-Wimplicit-fallthrough=5' doesn't recognize any comments as
fallthrough comments, only attributes disable the warning.
The comment needs to be followed after optional whitespace and
other comments by 'case' or 'default' keywords or by a user label
that precedes some 'case' or 'default' label.
switch (cond)
{
case 1:
bar (0);
/* FALLTHRU */
default:
...
}
The '-Wimplicit-fallthrough=3' warning is enabled by '-Wextra'.
No thanks to level 5, these days, you HAVE to use a macro that expands
to the attribute and/or C17 spelling, rather than relying on the lint
spelling, if you cannot control what level a user will request; although
with level 3, the lint spelling of a comment still works. I'm not sure
which static analyzers recognize which other spellings; which is why a
macro that consistently expands to the same string known to work, rather
than 20 different ad hoc comments (many of which work, but auditing that
all of them work is a bigger task), may be worthwhile.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [RFC PATCH 1/3] compiler: add QEMU_WARN_NONNULL_ARGS(), (continued)
[Qemu-devel] [RFC PATCH 2/3] virtio: let virtio_add/clear_feature() use QEMU_WARN_NONNULL_ARGS(), Philippe Mathieu-Daudé, 2018/01/17
[Qemu-devel] [RFC PATCH 3/3] utils: let qemu_find_file() use QEMU_WARN_NONNULL_ARGS(), Philippe Mathieu-Daudé, 2018/01/17
Re: [Qemu-devel] [RFC PATCH 0/3] add QEMU_WARN_NONNULL_ARGS() macro, Philippe Mathieu-Daudé, 2018/01/17
Re: [Qemu-devel] [RFC PATCH 0/3] add QEMU_WARN_NONNULL_ARGS() macro, Richard Henderson, 2018/01/17
- Re: [Qemu-devel] [RFC PATCH 0/3] add QEMU_WARN_NONNULL_ARGS() macro,
Eric Blake <=