https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119579
Bug ID: 119579
Summary: Derived type not initialized correctly with array
sections
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: vivekrao4 at yahoo dot com
Target Milestone: ---
For the code
module dataframe_mod
implicit none
private
public :: DataFrame, display, subset_stride
type :: DataFrame
real(kind=4), allocatable :: values(:,:)
end type DataFrame
contains
subroutine display(self)
class(DataFrame) :: self
integer :: i
do i = 1, UBOUND(self%values,dim=1)
write(*,"(1x,A,I1,*(1x,f10.4))") "row: ", i, self%values(i,:)
end do
end subroutine display
function subset_stride(df) result(df_new)
type(DataFrame) :: df
type(DataFrame) :: df_new
!...suspect below ...
df_new = DataFrame(values = df%values(1:8:3, :))
!...can fix this by explicitly setting result df_new
! uncomment_for_working_testcase
!allocate(df_new%values(3,2))
!df_new%values(1,:) = [ 1.1, 1.2 ]
!df_new%values(2,:) = [ 4.1, 4.2 ]
!df_new%values(3,:) = [ 7.1, 7.2 ]
end function subset_stride
end module dataframe_mod
program xxdataframe
use dataframe_mod
implicit none
type(DataFrame) :: df, df_new
allocate(df%values(8,2) )
df%values(1,:) = [ 1.1, 1.2 ]
df%values(2,:) = [ 2.1, 2.2 ]
df%values(3,:) = [ 3.1, 3.2 ]
df%values(4,:) = [ 4.1, 4.2 ]
df%values(5,:) = [ 5.1, 5.2 ]
df%values(6,:) = [ 6.1, 6.2 ]
df%values(7,:) = [ 7.1, 7.2 ]
df%values(8,:) = [ 8.1, 8.2 ]
write(*,*) "display initial values of df"
call display(df)
write(*,*)
df_new = subset_stride(df)
write(*,*) "print df_new, should have rows 1, 4, 7 "
write(*,*) "shape(df_new%values)", shape(df_new%values)
write(*,*) "bounds of df_new%values, dim 1: ", LBOUND(df_new%values,1),
UBOUND(df_new%values,1)
write(*,*) "bounds of df_new%values, dim 2: ", LBOUND(df_new%values,2),
UBOUND(df_new%values,2)
call display(df_new)
end program xxdataframe
from
https://fortran-lang.discourse.group/t/derived-type-initialized-with-array-sections-giving-unexpected-results/9470/5?u=beliavsky
gfortran gives incorrect output
display initial values of df
row: 1 1.1000 1.2000
row: 2 2.1000 2.2000
row: 3 3.1000 3.2000
row: 4 4.1000 4.2000
row: 5 5.1000 5.2000
row: 6 6.1000 6.2000
row: 7 7.1000 7.2000
row: 8 8.1000 8.2000
print df_new, should have rows 1, 4, 7
shape(df_new%values) 3 2
bounds of df_new%values, dim 1: 1 3
bounds of df_new%values, dim 2: 1 2
row: 1 1.1000 1.2000
row: 2 2.1000 2.2000
row: 3 3.1000 3.2000