[cfe-dev] Why does scan-build disable check for uninit values?

Cristian Draghici cristian.draghici at gmail.com
Sat Jan 3 01:09:25 PST 2009


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;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20090103/065aeeb6/attachment.html>


More information about the cfe-dev mailing list