https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94578
Bug ID: 94578 Summary: Incorrect assignment of RESHAPE() result to a Fortran pointer Product: gcc Version: 8.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: howisjw at hotmail dot com Target Milestone: --- The other day, I tried to compile a large Fortran code using gcc 8.3.0. In the code the reshape function is used and the resulting is assigned to a Fortran pointer. The results are not what I expected to be. I am not sure if it a bug or if I do something which is not according to the latest Fortran standard. I created a simple program (see below) to demostrate the problem. If I use the tmp array, like tmp = reshape(source=array2d, shape=shape(array1d)) array1d = tmp it all works. I have the impression that under-the-hood the result of the reshape function is stored in array1d using a some kind of memory copy. This works fine if array1d is contiguous in memory. However, if array1d is a Fortran pointer (my case) do not have to be contiguous in memory. program bug_reshape implicit none type :: value_and_derivatives real(kind=8) :: x,s,t,st,ss,tt logical :: up_to_date end type value_and_derivatives type :: tsolution type(value_and_derivatives) :: x, y end type tsolution type(tsolution), dimension(3*4), target :: solution ! Locals integer :: i, j type(value_and_derivatives), dimension(3,4) :: array2d type(value_and_derivatives), dimension(:), pointer :: array1d type(value_and_derivatives), dimension(3*4) :: tmp array1d => solution%x do j=1,4 do i=1,3 array2d(i,j) = value_and_derivatives(i*j, i, j, 0.1*i*j, 0.1*i, 0.1*j, .true.) end do end do array1d = reshape(source=array2d, shape=shape(array1d)) print*,"--- array2d ---" do j=1,4 do i=1,3 print '(2(i1,1x),6(e15.7,1x),l)',i,j,array2d(i,j) end do end do print*,"--- array1d ---" do i=1,12 print '(i1,1x,6(e15.7,1x),l)',i,array1d(i) end do end program bug_reshape Jan-Willem