https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100038
James Y Knight <foom at fuhm dot net> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |foom at fuhm dot net --- Comment #8 from James Y Knight <foom at fuhm dot net> --- Here's a shorter test-case, reproduces with g++-11 -O2 -Warray-bounds: ``` struct SparseBitVectorElement { long Bits[2]; int find_first() const; }; int SparseBitVectorElement::find_first() const { for (unsigned i = 0; i < 2; ++i) if (Bits[i]) return i; // __builtin_unreachable(); // Illegal empty element } ``` The "__builtin_unreachable" at the end of the function seems to be the trigger for the issue -- presumably because the compiler decides to omit the loop end condition as being unnecessary. Trying the above on godbolt, it appears that it no longer occurs on gcc trunk for this test-case. But, I don't know if that was intentionally fixed or just happens not to trigger here. (I haven't tried compiling LLVM with a gcc trunk snapshot to see if all similar warnings have gone away.)