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

Reply via email to