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."

Reply via email to