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: unassig...@gcc.gnu.org ReportedBy: bur...@gcc.gnu.org CC: pa...@gcc.gnu.org, tkoe...@gcc.gnu.org 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