! { 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') STOP 1

end program test_dollar