It seems that one of the recent DTIO commits have fixed the issues raised in PR Fortran/79383. I have converted the submitted code into two testcases.
2018-01-11 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/79383 * gfortran.dg/dtio_31.f03: New test. * gfortran.dg/dtio_32.f03: New test. OK to commit? -- Steve
Index: gcc/testsuite/gfortran.dg/dtio_31.f03 =================================================================== --- gcc/testsuite/gfortran.dg/dtio_31.f03 (nonexistent) +++ gcc/testsuite/gfortran.dg/dtio_31.f03 (working copy) @@ -0,0 +1,47 @@ +! { dg-do run } +! { dg-options="-w" } +! PR fortran/79383 +! Contributed by Walt Brainerd <walt.brainerd at gmail dot com> +module dollar_mod + + implicit none + + private + + type, public :: dollar_type + real :: amount + end type dollar_type + + interface write(formatted) + procedure :: Write_dollar + end interface + + public :: write(formatted) + + contains + + subroutine Write_dollar(dollar_value, unit, b_edit_descriptor, & + & v_list, iostat, iomsg) + + class(dollar_type), intent(in) :: dollar_value + integer, intent(in) :: unit + character(len=*), intent(in) :: b_edit_descriptor + integer, dimension(:), intent(in) :: v_list + integer, intent(out) :: iostat + character(len=*), intent(inout) :: iomsg + write(unit=unit, fmt="(f9.2)", iostat=iostat) dollar_value%amount + end subroutine Write_dollar + +end module dollar_mod + +program test_dollar + + use, non_intrinsic :: dollar_mod, only: dollar_type, write (formatted) + implicit none + + type(dollar_type), parameter :: wage = dollar_type(15.10) + character(len=10) str + write (str, fmt="(DT)") wage + if(trim(adjustl(str)) /= '15.10') call abort + +end program test_dollar Index: gcc/testsuite/gfortran.dg/dtio_32.f03 =================================================================== --- gcc/testsuite/gfortran.dg/dtio_32.f03 (nonexistent) +++ gcc/testsuite/gfortran.dg/dtio_32.f03 (working copy) @@ -0,0 +1,46 @@ +! { dg-do run } +! { dg-options="-w" } +! PR fortran/79383 +! Contributed by Walt Brainerd <walt.brainerd at gmail dot com> +module dollar_mod + + implicit none + + private + + type, public :: dollar_type + real :: amount + end type dollar_type + + interface write(formatted) + procedure :: Write_dollar + end interface + + public :: write(formatted) + + contains + + subroutine Write_dollar(dollar_value, unit, b_edit_descriptor, & + & v_list, iostat, iomsg) + class(dollar_type), intent(in) :: dollar_value + integer, intent(in) :: unit + character(len=*), intent(in) :: b_edit_descriptor + integer, dimension(:), intent(in) :: v_list + integer, intent(out) :: iostat + character(len=*), intent(inout) :: iomsg + write(unit=unit, fmt="(f9.2)", iostat=iostat) dollar_value%amount + end subroutine Write_dollar + +end module dollar_mod + +program test_dollar + + use :: dollar_mod ! with this USE, same result + implicit none + + type(dollar_type), parameter :: wage = dollar_type(15.10) + character(len=10) str + write(str, fmt="(DT)") wage + if (trim(adjustl(str)) /= '15.10') call abort + +end program test_dollar