https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88367
--- Comment #5 from Pavel <pbutsykin at virtuozzo dot com> --- Jonathan, sorry, attached. Richard, I forgot to show the structures: struct kmapset_map { struct kref kref; unsigned size; struct kmapset_set *set; unsigned long default_value; unsigned long hash; struct hlist_head links; union { struct rb_node node; struct rcu_head rcu_head; }; }; struct kmapset_link { struct kmapset_map *map; struct kmapset_key *key; unsigned long value; struct hlist_node map_link; union { struct hlist_node key_link; struct rcu_head rcu_head; }; }; Actually link_a is'n NULL, because map_link isn't the first member and hlist_entry is just container_of: #define hlist_entry(ptr, type, member) container_of(ptr,type,member) "In the case when map_a->links.first is NULL, then link_a will be equal to (NULL - 24) and expression &((struct kmapset_link *)(NULL - 24))->map_link will refer to NULL."