This is an archive of the discontinued LLVM Phabricator instance.

[flang] Non-type-bound defined IO lowering
ClosedPublic

Authored by vdonaldson on May 16 2023, 1:42 PM.

Details

Summary

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

Diff Detail

Event Timeline

vdonaldson created this revision.May 16 2023, 1:42 PM
vdonaldson requested review of this revision.May 16 2023, 1:42 PM
klausler accepted this revision.May 16 2023, 1:49 PM
This revision is now accepted and ready to land.May 16 2023, 1:49 PM