[flang] Non-type-bound defined IO lowering
authorV Donaldson <vdonaldson@nvidia.com>
Tue, 16 May 2023 20:34:57 +0000 (13:34 -0700)
committerV Donaldson <vdonaldson@nvidia.com>
Wed, 17 May 2023 16:22:13 +0000 (09:22 -0700)
commit6f7a3b078191a925546ea3fead2e9cf0efdd9257
treeb43c73dca6bd68517a866594bd947db29254bca2
parent53aed4759b33e33614e0f4e321bc1ef764b6d5b6
[flang] Non-type-bound defined IO lowering

Generate supporting data structures and calls to new runtime IO functions
for defined IO that accesses non-type-bound procedures, such as `wft` in:

module m1
  type t
    integer n
  end type
  interface write(formatted)
    module procedure wft
  end interface
 contains
  subroutine wft(dtv, unit, iotype, v_list, iostat, iomsg)
    class(t), intent(in) :: dtv
    integer, intent(in) :: unit
    character(*), intent(in) :: iotype
    integer, intent(in) :: v_list(:)
    integer, intent(out) :: iostat
    character(*), intent(inout) :: iomsg
    iostat = 0
    write(unit,*,iostat=iostat,iomsg=iomsg) 'wft was called: ', dtv%n
  end subroutine
end module

module m2
 contains
  subroutine test1
    use m1
    print *, 'test1, should call wft: ', t(1)
  end subroutine
  subroutine test2
    use m1, only: t
    print *, 'test2, should not call wft: ', t(2)
  end subroutine
end module

use m1
use m2
call test1
call test2
print *, 'main, should call wft: ', t(3)
end
16 files changed:
flang/include/flang/Lower/AbstractConverter.h
flang/include/flang/Lower/Mangler.h
flang/include/flang/Optimizer/Support/InternalNames.h
flang/include/flang/Semantics/runtime-type-info.h
flang/lib/Lower/Bridge.cpp
flang/lib/Lower/IO.cpp
flang/lib/Lower/Mangler.cpp
flang/lib/Optimizer/Support/InternalNames.cpp
flang/lib/Semantics/runtime-type-info.cpp
flang/runtime/namelist.cpp
flang/runtime/non-tbp-dio.h
flang/test/Lower/derived-type-finalization.f90
flang/test/Lower/io-derived-type.f90 [new file with mode: 0644]
flang/test/Lower/namelist.f90
flang/test/Lower/parent-component.f90
flang/test/Lower/vector-subscript-io.f90