On Mon, Feb 28, 2022 at 11:56 AM Linus Torvalds torvalds@linux-foundation.org wrote:
I do wish we could actually poison the 'pos' value after the loop somehow - but clearly the "might be uninitialized" I was hoping for isn't the way to do it.
Side note: we do need *some* way to do it.
Because if we make that change, and only set it to another pointer when not the head, then we very much change the semantics of "list_for_each_head()". The "list was empty" case would now exit with 'pos' not set at all (or set to NULL if we add that). Or it would be set to the last entry.
And regardless, that means that all the
if (pos == head)
kinds of checks after the loop would be fundamentally broken.
Darn. I really hoped for (and naively expected) that we could actually have the compiler warn about the use-after-loop case. That whole "compiler will now complain about bad use" was integral to my clever plan to use the C99 feature of declaring the iterator inside the loop.
But my "clever plan" was apparently some ACME-level Wile E. Coyote sh*t.
Darn.
Linus