https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92039
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> --- On Wed, 23 Oct 2019, marxin at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92039 > > Martin Liška <marxin at gcc dot gnu.org> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Keywords|needs-reduction | > CC| |marxin at gcc dot gnu.org > > --- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> --- > Just for the record a reduced test-case: > > int a[3]; > > void fn1(long b) { > int i; > for (i = 3; i >= b; --i) > a[i] = a[i - b]; > } > > where does not need -m32: > > $ gcc -Werror=array-bounds -O2 -c ice.i > ice.i: In function ‘fn1’: > ice.i:6:6: error: array subscript 3 is above array bounds of ‘int[3]’ > [-Werror=array-bounds] > 6 | a[i] = a[i - b]; > | ~^~~ > ice.i:1:5: note: while referencing ‘a’ > 1 | int a[3]; > | ^ > cc1: some warnings being treated as errors > > $ gcc-9 -Werror=array-bounds -O2 -c ice.i The testcase is probably misreduced since the very first iteration will write to a[3] out of bounds so it only is valid if the loop is not entered, thus if b < 3.