https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80333
Bug ID: 80333 Summary: Namelist dtio write of array of class does not traverse the array Product: gcc Version: 7.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: jvdelisle at gcc dot gnu.org Target Milestone: --- The following test case shows the wrong behavior. I am pretty sure this is frontend related. Notice that derived types work OK, but class does not. This is because the array specification for an array of class is stored differently and needs to be pulled out in trans_io.c (transfer_namelist_element). I have found the array spec in the component structure, but am not certain how to handle it. module m implicit none type :: t character :: c contains procedure :: read_formatted generic :: read(formatted) => read_formatted procedure :: write_formatted generic :: write(formatted) => write_formatted end type t contains subroutine read_formatted(dtv, unit, iotype, v_list, iostat, iomsg) class(t), intent(inout) :: dtv integer, intent(in) :: unit character(*), intent(in) :: iotype integer, intent(in) :: v_list(:) integer, intent(out) :: iostat character(*), intent(inout) :: iomsg read(unit,'(a1)', iostat=iostat, iomsg=iomsg) dtv%c end subroutine read_formatted subroutine write_formatted(dtv, unit, iotype, v_list, iostat, iomsg) class(t), intent(in) :: dtv integer, intent(in) :: unit character(*), intent(in) :: iotype integer, intent(in) :: v_list(:) integer, intent(out) :: iostat character(*), intent(inout) :: iomsg write(unit,'(a1)', iostat=iostat, iomsg=iomsg) dtv%c end subroutine write_formatted end module m program p use m implicit none class(t), dimension(:), allocatable :: w type(t), dimension(:), allocatable :: x namelist /nml/ w, x integer :: unit, iostatus allocate(w(10), x(10)) w = t('j') w(5:7)%c='k' x = t('p') x(4:8)%c='s' print *, w print *, x write(*, nml) end program p $ ./a.out j j j j k k k j j j p p p s s s s s p p &NML W=j X=pppssssspp /