3 ms·
Why can't the following be a warning? int foo(bar *x) { x->blah = 0; if (x == NULL) ... ... } And produce something like "NULL
by spc476 7y ago
Why can't the following be a warning?
int foo(bar *x)
{
x->blah = 0;
if (x == NULL) ...
...
}
And produce something like "NULL check removed---pointer used before check"?
- clarry 7y agoIn theory? No reason. In practice it's a special case of a more widely applicable optimization where you actually do want to remove redundant checks. So someone has to go out of their way to figure out a rule that makes the compiler warn but only in cases where a human reader finds the optimization surprising and undesirable. It's a fuzzy thing and can easily lead to lots of false positives and noise (and more whining because it didn't warn in a situation that someone considered surprising). I think that kind of logic can easily become a support & maintenance nightmare, so I'm not surprised that compiler developers take their time and are conservative when it comes to adding such things. I would probably just ask you to either stop dereferencing NULL pointers, or turn off the optimization if you want to dereference NULL pointers and eat your cake too.