Clang static analysis results for dmd

dennis luehring dl.soluz at gmx.net
Sun Jul 31 03:28:12 PDT 2011


Am 31.07.2011 11:47, schrieb Don:
> dennis luehring wrote:
>> Am 29.07.2011 22:02, schrieb Walter Bright:
>>> Here's another one:
>>>
>>>    T* p;
>>>    ...
>>>    if (A)
>>>        p = &t;
>>>    ...
>>>    if (B)
>>>        ... *p ...
>>>
>>> B is true if and only if A is true. B can even be the same expression as
>>> A, such as a->b->c. Clang complains on the *p that p is "uninitialized".
>>> Ok, so I rewrite as:
>>>
>>>    T* p = NULL;
>>>    ...
>>>    if (A)
>>>        p = &t;
>>>    ...
>>>    if (B)
>>>        ... *p ...
>>>
>>> but now clang says I'm dereferencing a NULL pointer. At this point, I'm
>>> faced with some significant trial-and-error refactoring to get rid of
>>> the message.
>>>
>>> At what point does this cease to be fixing "bugs" and become "contort to
>>> fit clang's quirks"?
>>
>> but your code does not reflect your "B is true if and only if A is
>> true." statement
> 
> The example I posted was clearer.

but i think clang was right with Walters code - i do not understand
why he splits up the A and B conditional block into spereated ones when
B does not work if A wasn't true before... makes it sense (in exactly
this case) to write the code like he does?



More information about the Digitalmars-d mailing list