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"?

Reply via email to