https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88367
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |9.0 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- This isn't about NULL pointers. &link_a->map_link is never NULL unless link_a is a NULL pointer and map_link is the first member. Thus GCC preserves the check with struct X { int i; }; int foo (struct X *p) { return &p->i == (void *)0; } I suspect your hlist_entry et al have a returns_nonnull attribute or so?