What does Coverity/clang static analysis actually do?
asd
asd at asd.invalid
Sat Oct 17 13:53:42 PDT 2009
Walter Bright Wrote:
> >> 2. Optimizer collects the info, but ignores this, because people are
> >> annoyed by false positives.
clang analyzer tries to avoid false positives very hard. To the point that every error message has link for sending a bug report.
> The problem crops up when there are two connected variables:
>
> void foo(bool flag)
> {
> char* p = null;
> if (flag)
> p = "hello";
> ...
> if (flag)
> bar(*p);
> }
>
> The code is logically correct, there is no null pointer dereference
> possible. However, the data flow analysis will see the *p and see two
> reaching definitions for p: null and "hello", even though only one
> actually reaches.
>
> Hence the false positive. To eliminate the false error report, the user
> would have to insert a redundant null check.
>
> Does this happen in practice? Yes.
I've tested this exact code in clang analyzer and it's actually smart enough no to report that as error!
if (flag)
bar(*p)
is not reported, but:
if (!flag)
bar(*p)
is reported, so the analyzer can follow connected variables properly.
More information about the Digitalmars-d
mailing list