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 <[email protected]>
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