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.