https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67171
Bug ID: 67171
Summary: [6.0 regression] sourced allocation
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: mexas at bristol dot ac.uk
CC: vehre at gcc dot gnu.org
Target Milestone: ---
program z
implicit none
real, allocatable :: d(:,:), tmp(:,:)
integer :: i, errstat
allocate( d( 100, 2 ), source = 0.0, stat=errstat )
d(:,1) = (/ ( real(i), i=1,100) /)
d(:,2) = (/ ( real(2*i), i=1,100) /)
write (*,*) d( 1, :)
call move_alloc( from=d, to=tmp )
write (*,*) tmp( 1, :)
allocate( d( 50, 2 ), source = tmp(1:50,:) , stat=errstat )
write (*,*) d( 1, :)
deallocate( tmp )
end program z
Correct output in gfortran 5:
$ gfortran5 -Wl,-rpath=/usr/local/lib/gcc5 z.f90
$ ./a.out
1.00000000 2.00000000
1.00000000 2.00000000
1.00000000 2.00000000
Wrong output in gfortran 6:
$ gfortran6 -Wl,-rpath=/usr/local/lib/gcc6 z.f90
$ ./a.out
1.00000000 2.00000000
1.00000000 2.00000000
4.00000000 0.00000000
This is on FreeBSD 10.1-RELEASE-p16 amd64