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