[cfe-dev] Non-deterministic diagnostics for -Wuninitialized.

Ted Kremenek kremenek at apple.com
Thu Jan 10 10:08:17 PST 2013


On Jan 10, 2013, at 6:34 AM, Enea Zaffanella <zaffanella at cs.unipr.it> wrote:

> On 01/10/2013 03:19 PM, Csaba Raduly wrote:
>> On Thu, Jan 10, 2013 at 1:21 PM, Enea Zaffanella  wrote:
>>> On 01/10/2013 01:09 PM, Csaba Raduly wrote:
>>>> Which version of clang are you using? I got the same md5sum (different
>>>> from both of yours) ten times in a row with
>>>> 
>>>> $ clang -v
>>>> clang version 3.3 (trunk 171717)
>>>> Target: x86_64-unknown-linux-gnu
>>>> Thread model: posix
>>>> 
>>>> 
>>>> Csaba
>>>> 
>>> 
>>> $ clang -v
>>> clang version 3.3 (trunk 171957)
>>> 
>>> Target: x86_64-unknown-linux-gnu
>>> Thread model: posix
>>> 
>>> (built in debug mode).
>> 
>> It may be something the debug mode prints (my clang is Release+Asserts).
>> 
>> There seems to be two different outputs. Perhaps if you showed them
>> instead of the md5sum, it would be easier to spot the difference.
>> 
>> Csaba
> 
> 
> The difference is just the order of the two diagnostics.
> 
> ====================================================================
> $ clang -Wuninitialized -fsyntax-only bug.c
> bug.c:3:7: warning: variable 'b' is uninitialized when used here
>      [-Wuninitialized]
>  a = b;
>      ^
> bug.c:2:8: note: initialize the variable 'b' to silence this warning
>  int b, c;
>       ^
>        = 0
> bug.c:4:7: warning: variable 'c' is uninitialized when used here
>      [-Wuninitialized]
>  a = c;
>      ^
> bug.c:2:11: note: initialize the variable 'c' to silence this warning
>  int b, c;
>          ^
>           = 0
> 2 warnings generated.
> ====================================================================
> 
> 
> ====================================================================
> $ clang -Wuninitialized -fsyntax-only bug.c
> bug.c:4:7: warning: variable 'c' is uninitialized when used here
>      [-Wuninitialized]
>  a = c;
>      ^
> bug.c:2:11: note: initialize the variable 'c' to silence this warning
>  int b, c;
>          ^
>           = 0
> bug.c:3:7: warning: variable 'b' is uninitialized when used here
>      [-Wuninitialized]
>  a = b;
>      ^
> bug.c:2:8: note: initialize the variable 'b' to silence this warning
>  int b, c;
>       ^
>        = 0
> 2 warnings generated.
> ====================================================================
> 
> These diagnostics are produced by the analyzer; the analyzer goes through the list of CFG blocks; if I remember correctly, the iterators on these are in general non-deterministic.

These diagnostics are *not* produced by the static analyzer.  These are compiler warnings.

Also, the CFG iterators are deterministic.    The list of basic blocks is just a vector.



More information about the cfe-dev mailing list