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.
Where p is just a variable:
if (!p) { ... }
if (p) { ... }
it thinks that NEITHER of the code paths is taken.
I would rate that as a show-stopper bug. Don't waste any more time on
clang until that's fixed.