! Check that InputDerivedType/OutputDeriverType APIs are used
! for io of derived types.
! RUN: bbc -emit-fir -o - %s | FileCheck %s
module p
type :: person
type(person), pointer :: next => null()
end type person
type :: club
class(person), allocatable :: membership(:)
end type club
contains
subroutine pwf (dtv,unit,iotype,vlist,iostat,iomsg)
class(person), intent(in) :: dtv
integer, intent(in) :: unit
character (len=*), intent(in) :: iotype
integer, intent(in) :: vlist(:)
integer, intent(out) :: iostat
character (len=*), intent(inout) :: iomsg
print *, 'write'
end subroutine pwf
subroutine prf (dtv,unit,iotype,vlist,iostat,iomsg)
class(person), intent(inout) :: dtv
integer, intent(in) :: unit
character (len=*), intent(in) :: iotype
integer, intent(in) :: vlist(:)
integer, intent(out) :: iostat
character (len=*), intent(inout) :: iomsg
end subroutine prf
subroutine test1(dtv)
interface read(formatted)
module procedure prf
end interface read(formatted)
class(person), intent(inout) :: dtv
read(7, fmt='(DT)') dtv%next
end subroutine test1
! CHECK-LABEL: func.func @_QMpPtest1(
! CHECK: %{{.*}} = fir.call @_FortranAioInputDerivedType(%{{.*}}, %{{.*}}, %{{.*}}) fastmath<contract> : (!fir.ref<i8>, !fir.box<none>, !fir.ref<none>) -> i1
subroutine test2(social_club)
interface read(formatted)
module procedure prf
end interface read(formatted)
class(club) :: social_club
read(7, fmt='(DT)') social_club%membership(0)
end subroutine test2
! CHECK-LABEL: func.func @_QMpPtest2(
! CHECK: %{{.*}} = fir.call @_FortranAioInputDerivedType(%{{.*}}, %{{.*}}, %{{.*}}) fastmath<contract> : (!fir.ref<i8>, !fir.box<none>, !fir.ref<none>) -> i1
subroutine test3(dtv)
interface write(formatted)
module procedure pwf
end interface write(formatted)
class(person), intent(inout) :: dtv
write(7, fmt='(DT)') dtv%next
end subroutine test3
! CHECK-LABEL: func.func @_QMpPtest3(
! CHECK: %{{.*}} = fir.call @_FortranAioOutputDerivedType(%{{.*}}, %{{.*}}, %{{.*}}) fastmath<contract> : (!fir.ref<i8>, !fir.box<none>, !fir.ref<none>) -> i1
subroutine test4(social_club)
interface write(formatted)
module procedure pwf
end interface write(formatted)
class(club) :: social_club
write(7, fmt='(DT)') social_club%membership(0)
end subroutine test4
! CHECK-LABEL: func.func @_QMpPtest4(
! CHECK: %{{.*}} = fir.call @_FortranAioOutputDerivedType(%{{.*}}, %{{.*}}, %{{.*}}) fastmath<contract> : (!fir.ref<i8>, !fir.box<none>, !fir.ref<none>) -> i1
end module p