https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108374
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #4)
> Hmm, but then the program is bogus, no? And a diagnostic warranted.
No.
> At least if it is well-defined to have a nullptr == pointer.
It's well defined, but that doesn't mean the program is bogus. It just means
you can't call that function with such a value.
> So I'd be inclined to close as INVALID?
No, I don't think so. It would only be invalid if you called f(nullptr) or
similar.
The code is basically doing something like:
int f(const A* p, bool is_valid)
{
const A* q = is_valid ? p : nullptr;
return *q;
}
Instead of complaining that q might be null, we can optimize that to return *p.
It might be nicer to optimize it to:
if (!p)
__builtin_trap();
return *p;
but either way, we can't just declare the whole program to be invalid because
it's possible to call the function incorrectly.