http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52012
Bug #: 52012 Summary: [4.6/4.7 Regression] Wrong-code with RESHAPE Classification: Unclassified 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 The following program prints with GCC 4.6 and 4.7: 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Expected: The following result - as with GCC 4.5: 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 Doing a simple print '(10f3.0)', a shows the correct result. Thus, depending how one accesses an array element, the result is correct or wrong. The issue was reported by Reinhold Bader; I added the abort checks (both fail). program gf implicit none real, allocatable :: a(:,:,:) ! real :: a(5,4,3) real :: b(3,4,5) = 0.0 b(1,2,3) = 1.0 allocate(a(size(b,3),size(b,2),size(b,1))) a = reshape(b,shape(a),order=[3,2,1]) write(*,*) a(:,2,1) ! the following line prints an incorrect value of a(3,2,1) ! even though the above one works correctly write(*,*) a(1,2,1), a(2,2,1), a(3,2,1) if (a(3,2,1) /= 1) call abort() if (sum(abs(a)) /= 1.0) call abort() end program