https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97320
Bug ID: 97320 Summary: False positive "Array reference out of bounds in loop" in a protecting if block Product: gcc Version: 10.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: trnka at scm dot com Target Milestone: --- Compiling the following testcase with "gfortran -c -Wdo-subscript do-subscript-test.f90" leads to a bunch of warnings like the following: do-subscript-test.f90:13:26: 7 | i_: do i = 1, 10 | 2 ...... 13 | a(i-4) > a(i-5)) & | 1 Warning: Array reference at (1) out of bounds (-4 < 1) in loop beginning at (2) [-Wdo-subscript] Given that all these accesses are in an "if (i > 5)" block, the warnings are false positives and the out-of-bounds accesses cannot really occur. Inspecting the .optimized output confirms this. I can reproduce this using GCC 8 through 10 (GNU Fortran (GCC) 10.2.1 20200827 (Red Hat 10.2.1-3)), with or without -O2. ===== do-subscript-test.f90 ===== subroutine do_subscript_test() implicit none integer :: i real :: a(10) i_: do i = 1, 10 if (i > 5) then if (a(i) > a(i-1) .and. & a(i-1) > a(i-2) .and. & a(i-2) > a(i-3) .and. & a(i-3) > a(i-4) .and. & a(i-4) > a(i-5)) & exit i_ end if end do i_ end subroutine