http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48955
Summary: [4.6/4.7 Regression] Wrong result for array assignment
due to missing temporary
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: critical
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected], [email protected]
As reported on IRC.
The following program should print:
-10.0000 -20.0000 -20.0000 -10.0000 10.0000 20.0000 20.0000 10.0000
-10.0000 -20.0000 -20.0000 -10.0000 10.0000 20.0000 20.0000 10.0000
It does so with gfortran 4.3.4, 4.4.0, 4.5.3, ifort, NAG. However, using
gfortran 4.6.0, 4.7.0 (and for that matter 4.1.2) the first line is wrong:
-10.0000 -20.0000 -25.0000 -17.5000 6.2500 18.1250 24.0625 10.0000
-10.0000 -20.0000 -20.0000 -10.0000 10.0000 20.0000 20.0000 10.0000
program ala
implicit none
integer, parameter :: n = 8
real, dimension(n) :: v0, v1
v0 = [-10.0, -10., -10., -10., 10., 10., 10., 10.]
v1 = v0
v1(2:n-1) = 0.5*(v1(1:n-2) + v1(3:n) + 2.0*v1(2:n-1))
write(*,'(8(F8.4,1X))') v1
v1 = v0
v1(2:n-1) = 0.5*(v0(1:n-2) + v0(3:n) + 2.0*v0(2:n-1))
write(*,'(8(F8.4,1X))') v1
end program ala
First regression hunting shows:
Works: 2010-07-16-r162255
Fails: 2010-08-28-r163612