https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78659
Bug ID: 78659 Summary: Spurious "requires DTIO" reported against namelist statement Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: ian_harvey at bigpond dot com Target Milestone: --- The attached, when compiled with gfortran recent trunk (r243203): MODULE ma IMPLICIT NONE TYPE :: ta INTEGER, ALLOCATABLE :: array(:) END TYPE ta END MODULE ma PROGRAM p USE ma TYPE(ta) :: x NAMELIST /nml/ x END PROGRAM p results in: $ gfortran 2016-12-03\ dtio-namelist-1.f90 2016-12-03 dtio-namelist-1.f90:11:15: NAMELIST /nml/ x 1 Error: NAMELIST object ‘x’ in namelist ‘nml’ at (1) has ALLOCATABLE or POINTER components and thus requires a defined input/output procedure The error is reported against the namelist statement. The standard does not impose such a requirement on the namelist statement itself - the requirement is imposed on data transfer statements that reference the namelist (F2008 9.6.4.7p2). A namelist with such an object is not useful, so a warning is perhaps warranted specifically for the above code, but the current error message causes issues with useful code, such as: MODULE mb IMPLICIT NONE TYPE :: tb INTEGER, ALLOCATABLE :: array(:) CONTAINS PROCEDURE :: read_formatted GENERIC :: READ(FORMATTED) => read_formatted END TYPE tb CONTAINS SUBROUTINE read_formatted(dtv, unit, iotype, v_list, iostat, iomsg) CLASS(tb), INTENT(INOUT) :: dtv INTEGER, INTENT(IN) :: unit CHARACTER(*), INTENT(IN) :: iotype INTEGER, INTENT(IN) :: v_list(:) INTEGER, INTENT(OUT) :: iostat CHARACTER(*), INTENT(INOUT) :: iomsg iostat = 0 END SUBROUTINE read_formatted END MODULE mb PROGRAM p USE mb TYPE(tb) :: y NAMELIST /nml/ y READ (*, nml) END PROGRAM p $ gfortran 2016-12-03\ dtio-namelist-2.f90 2016-12-03 dtio-namelist-2.f90:25:15: NAMELIST /nml/ y 1 Error: NAMELIST object ‘y’ in namelist ‘nml’ at (1) has ALLOCATABLE or POINTER components and thus requires a defined input/output procedure The error goes away if a defined output procedure is also provided, but the standard does not require a defined output procedure for the last example.