! { dg-do run } ! Tests that inquire(iolength=) treats derived types as if they do not ! have User Defined procedures. Fortran Draft F2016 Standard, 9.10.3 MODULE p TYPE :: person CHARACTER (LEN=20) :: name INTEGER(4) :: age END TYPE person INTERFACE WRITE(FORMATTED) MODULE procedure pwf END INTERFACE INTERFACE WRITE(UNFORMATTED) MODULE procedure pwuf END INTERFACE INTERFACE read(FORMATTED) MODULE procedure prf END INTERFACE INTERFACE read(UNFORMATTED) MODULE procedure pruf END INTERFACE CONTAINS SUBROUTINE pwf (dtv,unit,iotype,vlist,iostat,iomsg) CLASS(person), INTENT(IN) :: dtv INTEGER, INTENT(IN) :: unit CHARACTER (LEN=*), INTENT(IN) :: iotype INTEGER, INTENT(IN) :: vlist(:) INTEGER, INTENT(OUT) :: iostat CHARACTER (LEN=*), INTENT(INOUT) :: iomsg WRITE(unit, FMT = *, IOSTAT=iostat) dtv%name, dtv%age END SUBROUTINE pwf SUBROUTINE prf (dtv,unit,iotype,vlist,iostat,iomsg) CLASS(person), INTENT(INOUT) :: dtv INTEGER, INTENT(IN) :: unit CHARACTER (LEN=*), INTENT(IN) :: iotype INTEGER, INTENT(IN) :: vlist(:) INTEGER, INTENT(OUT) :: iostat CHARACTER (LEN=*), INTENT(INOUT) :: iomsg READ (UNIT = UNIT, FMT = *) dtv%name, dtv%age END SUBROUTINE prf SUBROUTINE pwuf (dtv,unit,iostat,iomsg) CLASS(person), INTENT(IN) :: dtv INTEGER, INTENT(IN) :: unit INTEGER, INTENT(OUT) :: iostat CHARACTER (LEN=*), INTENT(INOUT) :: iomsg print *, "in pwuf" WRITE (UNIT=UNIT, FMT = *) DTV%name, DTV%age END SUBROUTINE pwuf SUBROUTINE pruf (dtv,unit,iostat,iomsg) CLASS(person), INTENT(INOUT) :: dtv INTEGER, INTENT(IN) :: unit INTEGER, INTENT(OUT) :: iostat CHARACTER (LEN=*), INTENT(INOUT) :: iomsg print *, "in pruf" READ (UNIT = UNIT, FMT = *) dtv%name, dtv%age END SUBROUTINE pruf END MODULE p PROGRAM test USE p IMPLICIT NONE TYPE (person) :: chairman integer(4) :: rl, tl, kl chairman%name="Charlie" chairman%age=62 inquire(iolength=rl) rl, kl, chairman, rl, chairman, tl if (rl.ne.64) STOP 1 END PROGRAM test