[Bug c++/112767] New: [14 regression] spurious -Waggressive-loop-optimizations
sss@li-snyder.org
gcc-bugzilla@gcc.gnu.org
Wed Nov 29 18:24:49 GMT 2023
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: sss@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.
More information about the Gcc-bugs
mailing list