Skip to content
Commit beaec533 authored by Alexander Potapenko's avatar Alexander Potapenko Committed by Linus Torvalds
Browse files

llist: clang: introduce member_address_is_nonnull()



Currently llist_for_each_entry() and llist_for_each_entry_safe() iterate
until &pos->member != NULL.  But when building the kernel with Clang,
the compiler assumes &pos->member cannot be NULL if the member's offset
is greater than 0 (which would be equivalent to the object being
non-contiguous in memory).  Therefore the loop condition is always true,
and the loops become infinite.

To work around this, introduce the member_address_is_nonnull() macro,
which casts object pointer to uintptr_t, thus letting the member pointer
to be NULL.

Signed-off-by: default avatarAlexander Potapenko <glider@google.com>
Tested-by: default avatarSodagudi Prasad <psodagud@codeaurora.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e06fdaf4
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment