https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98503

--- Comment #9 from Willy Tarreau <w at 1wt dot eu> ---
Hi Richard,

indeed, the &curr->list == &head is the test for end of list that prevents any
bad access from happening.

I know that usually the right way to do this is by using a list element, but
sometimes it requires placing casts all over the code, or container_of() and
friends in every single call, which is way more error-prone. Writing state
machines with different input types in general doesn't result in reliable
long-term code. It turns out that in the code affected by this there were only
two call places that I could tear a little bit to use the list instead (and an
alias pointer, which I hate keeping) but I'm not extremely happy with this
workaround.

I'm well aware that there can be aliasing issues while doing this, which is
also why I tested with -fno-strict-aliasing and saw the warninig remain, which
I'd argue is definitely not appropriate in this case.

I really think that this one is border-line. Not useless at all, but should
only trigger at a higher level so that users don't have to get rid of
-Warray-bounds just because of it. The linux kernel already had to disable it
for other reasons and that's really sad in my opinion, which is why I'm trying
hard to keep it.

Thanks,
Willy

Reply via email to