[cfe-commits] False positive for -Wunreachable-code
Richard Smith
richard at metafoo.co.uk
Tue Oct 30 14:19:44 PDT 2012
On Tue, Oct 30, 2012 at 1:51 PM, Ted Kremenek <kremenek at apple.com> wrote:
> On Oct 30, 2012, at 1:24 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>
> 3) If there is no code after an enum-covered switch with no default,
> or the next statement can be reached by a different path, we should
> make a conservative assumption (that it cannot happen for cases where
> it happening would trigger a warning, and that it can happen in cases
> where it not happening would trigger a warning).
>
>
> I think I understand what you mean, but that's a bit of a run on sentence.
> The multiple "it happening" and "it not happening" is confusing. Can you be
> a bit more clear? Since this may not be fixed immediately it would be good
> to establish some clarity here.
Sorry for my terrible sentence construction! I have in mind examples like this:
enum E { a, b, c };
int f(bool b, E e) {
int n;
if (b) {
switch (e) { // #1
case a: case b: case c:
return 0;
}
} else {
n = 0;
}
return n; // #2
}
I'm suggesting that in this case, we should be conservative when
adding a CFG edge from #1 to #2, because:
* #2 has predecessors other than #1, and
* #1 has no explicit indication that the default case is reachable
By "be conservative", I mean:
* If the presence of a CFG edge would make a particular checker
think there was a bug, we assume the edge from #1 to #2 cannot happen
for the purpose of that check
* If the absence of a CFG edge would make a particular checker think
there was a bug, we assume the edge from #1 to #2 can happen for the
purpose of that check
So, -Wuninitialized and -Wreturn-type would assume that the edge from
#1 to #2 cannot happen (and -Wuninitialized would not warn here). But
-Wunreachable-code would assume that the edge from #1 to #2 can
happen, and again would not warn (as it happens, -Wunreachable-code
can actually assume that the edge cannot happen too, since we only
make this assumption in the cases where we already know #2 is
reachable by some other path).
More information about the cfe-commits
mailing list