[cfe-commits] False positive for -Wunreachable-code
Abramo Bagnara
abramo.bagnara at bugseng.com
Tue Oct 30 10:40:51 PDT 2012
Il 30/10/2012 17:25, Jordan Rose ha scritto:
>
> On Oct 30, 2012, at 2:34 , Abramo Bagnara <abramo.bagnara at bugseng.com> wrote:
>
>> Il 28/10/2012 08:12, Abramo Bagnara ha scritto:
>>> $ cat p.c
>>> #include <stdio.h>
>>>
>>> enum e { a, b = 4 } x = 3;
>>>
>>> void g(int v) {
>>> printf("%d\n", v);
>>> }
>>>
>>> int main(int argc, char **argv) {
>>> switch (x) {
>>> case a:
>>> g(0);
>>> break;
>>> case b:
>>> g(1);
>>> break;
>>> default:
>>> g(2);
>>> break;
>>> }
>>> }
>>> $ _clang -Wunreachable-code -Wcovered-switch-default -O2 p.c
>>> p.c:17:3: warning: default label in switch which covers all enumeration
>>> values
>>> [-Wcovered-switch-default]
>>> default:
>>> ^
>>> p.c:18:7: warning: will never be executed [-Wunreachable-code]
>>> g(2);
>>> ^
>>> $ ./a.out
>>> 2
>>>
>>> Of course -Wcovered-switch-default warning is a perfectly true positive.
>>>
>>> My reading of the standard is that nothing prevent an enum to have a
>>> value different from listed enum constants if this value is compatible
>>> with enum range (and code generation seems to agree on that).
>>
>> I've attached the patch for review.
>>
>> The fixed testcase shows well why to hide warnings about undefined
>> behaviour in code actually generated is a bad thing.
>
> If we do this, we're going to want this under a CFG option at the very least. The static analyzer should continue assuming that an enum input to a switch is always a valid enum constant, in order to keep our false positive rate down.
>
Can you show an example of those false positives?
--
Abramo Bagnara
BUGSENG srl - http://bugseng.com
mailto:abramo.bagnara at bugseng.com
More information about the cfe-commits
mailing list