https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112767
Bug ID: 112767 Summary: [14 regression] spurious -Waggressive-loop-optimizations Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: s...@li-snyder.org Target Milestone: --- With a recent checkout of gcc14 (20231129), on a x86_64-pc-linux-gnu host, the following source gives a seemingly bogus -Waggressive-loop-optimizations warning with -O3: -------------------------------------------------------------- double reg_dict[32]; void foo(int); void initialize() { int i=8; for (int phi=0; phi<8; ++phi) { reg_dict[i]=0; int sn = 0; if (i < 16) sn = 20; foo(sn); ++i; } } -------------------------------------------------------------- $ g++ -c -O3 x.cc x.cc: In function ‘void initialize()’: x.cc:9:16: warning: iteration 16 invokes undefined behavior [-Waggressive-loop-optimizations] 9 | reg_dict[i]=0; | ~~~~~~~~~~~^~ x.cc:8:22: note: within this loop 8 | for (int phi=0; phi<8; ++phi) { | ~~~^~ This is a confusing warning, as the containing loop is executed only 8 times. Exactly which undefined behavior is meant is also not spelled out. >From the context, i'd guess it to be an out-of-bounds array write, but that's a false positive. The warning happens with -O3 but not with lower optimization levels. It also does not occur with gcc 13.2.1 20230728.