[cfe-dev] Why does scan-build disable check for uninit values?
Ted Kremenek
kremenek at apple.com
Sat Jan 3 11:32:25 PST 2009
On Jan 3, 2009, at 1:43 AM, Cristian Draghici wrote:
>
>
> On Sat, Jan 3, 2009 at 11:09 AM, Cristian Draghici <cristian.draghici at gmail.com
> > wrote:
>
>
> On Fri, Jan 2, 2009 at 11:43 PM, Ted Kremenek <kremenek at apple.com>
> wrote:
>
> On Jan 2, 2009, at 2:18 AM, Cristian Draghici wrote:
>
> Hi
>
> I've noticed that scan-build in the latest version of the checker
> (137) disables the check for uninit values (-warn-uninit-values).
> Is there a reason behind that?
>
>
> Thank you,
> Cristi
>
> In the static analyzer, checking for uninitialized values, just as
> with checking for null dereferences, is done as part of the core
> path-sensitive logic used for -checker-cfref and -checker-simple.
> It isn't controlled by -warn-uninit-values.
>
> The -warn-uninit-values option performs a fast check for uses of
> uninitialized values that is similar to GCC's -Wuninitialized. It
> should be thought of as a cheap check that can be used (one day) as
> a compiler warning rather than a deep check done by the static
> analyzer. The checking for uninitialized values done by the static
> analyzer is far more precise.
>
> Some of these options should probably be renamed to avoid such
> confusion.
>
> My confusion was actually caused by the different output of "-
> checker-cfref" vs "-warn-uninit-values".
>
> In the warning below shouldn't clang say "Pass-by-value argument in
> function is uninitialized"?
> English is not my native language so I may be wrong but I tend to
> equate "undefined" with "undeclared" (as in lacking definition).
>
> diciu$ ~/Downloads/checker-137/clang -x c test.c -checker-cfref
> ANALYZE: test.c main
> test.c:6:2: warning: Pass-by-value argument in function is undefined.
> strcpy(t, g);
> ^ ~
> 1 diagnostic generated.
>
>
> diciu$ ~/Downloads/checker-137/clang -x c test.c -warn-uninit-values
> test.c:6:9: warning: use of uninitialized variable
> strcpy(t, g);
> ^
> test.c:6:12: warning: use of uninitialized variable
> strcpy(t, g);
> ^
> 2 diagnostics generated.
>
> test.c is:
>
> #include <string.h>
>
> int main()
> {
> char * t, * g;
> strcpy(t, g);
>
> return 0;
> }
>
>
>
>
> Oh, nevermind, I get it.
>
> "Pass-by-value argument in function is undefined" probably refers to
> the value pointed to by the char pointer as being undefined, which
> it is.
That's it. I used the terminology "undefined" because undefined
values can come from other sources other than uninitialized
variables. The warning, however, could probably be worded a little
more clearly.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20090103/e8fee278/attachment.html>
More information about the cfe-dev
mailing list