This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/52012] New: [4.6/4.7 Regression] Wrong-code with RESHAPE
- From: "burnus at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 26 Jan 2012 21:49:17 +0000
- Subject: [Bug fortran/52012] New: [4.6/4.7 Regression] Wrong-code with RESHAPE
- Auto-submitted: auto-generated
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: unassigned@gcc.gnu.org
ReportedBy: burnus@gcc.gnu.org
CC: pault@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