[Bug fortran/59561] New: [4.9 Regression] warning: iteration 4 invokes undefined behavior
janus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Dec 19 13:38:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59561
Bug ID: 59561
Summary: [4.9 Regression] warning: iteration 4 invokes
undefined behavior
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: janus at gcc dot gnu.org
Found when working on PR 55207 ...
With the following modification:
Index: gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 (revision
206100)
+++ gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 (working copy)
@@ -3,7 +3,8 @@
integer, parameter :: nx = 3, ny = 4
- integer :: i, j, too_big
+ integer :: i, j
+ integer, save :: too_big
integer, parameter, dimension(nx,ny) :: p = &
reshape((/ (i*i, i=1,size(p)) /), shape(p))
so that this test case becomes:
! { dg-do run }
! { dg-options "-fbounds-check" }
integer, parameter :: nx = 3, ny = 4
integer :: i, j
integer, save :: too_big
integer, parameter, dimension(nx,ny) :: p = &
reshape((/ (i*i, i=1,size(p)) /), shape(p))
integer, dimension(nx,ny) :: a
integer, dimension(:), allocatable :: b
allocate(b(nx))
a = p
too_big = ny + 1
b = sum(a(:,1:too_big),2)
end
! { dg-shouldfail "outside of expected range" }
trunk gives:
$ gfortran-4.9 inline_sum_bounds_check_1.f90 -O2
inline_sum_bounds_check_1.f90: In function ‘MAIN__’:
inline_sum_bounds_check_1.f90:21:0: warning: iteration 4 invokes undefined
behavior [-Waggressive-loop-optimizations]
b = sum(a(:,1:too_big),2)
^
inline_sum_bounds_check_1.f90:21:0: note: containing loop
inline_sum_bounds_check_1.f90: In function ‘main’:
inline_sum_bounds_check_1.f90:21:0: warning: iteration 4 invokes undefined
behavior [-Waggressive-loop-optimizations]
b = sum(a(:,1:too_big),2)
^
inline_sum_bounds_check_1.f90:21:0: note: containing loop
with -O2 and -O3, while 4.8 did not do that. Probably the warning is ok, since
the test case is supposed to trigger a runtime error ("Index '5' of dimension 2
of array 'a' outside of expected range (4:1)").
However, I see three possible problems:
1) The question is why it only happens with SAVE.
2) I don't understand why the warning has 'iteration 4'. Shouldn't iteration 5
be the problem?
3) The warning appears twice.
More information about the Gcc-bugs
mailing list