blob: a38afccf0e58eaf70c05f6133dd3cada4a1e5d30 [file] [log] [blame]
! { dg-do run }
!
! PR fortran/110618
! Check that if a data reference is passed as actual argument whose dummy
! has INTENT(OUT) attribute, any other argument depending on the
! same data reference is evaluated before the data reference deallocation.
program p
implicit none
type t
integer :: i
end type t
type u
class(t), allocatable :: ta(:)
end type u
type(u), allocatable :: c(:)
class(t), allocatable :: d(:)
allocate(c, source = [u([t(1), t(3)]), u([t(4), t(9)])])
allocate(d, source = [t(1), t(5)])
call bar ( &
allocated(c(d(1)%i)%ta), &
d, &
c(d(1)%i)%ta, &
allocated (c(d(1)%i)%ta) &
)
if (allocated (c(1)%ta)) stop 11
if (.not. allocated (c(2)%ta)) stop 11
contains
subroutine bar (alloc, x, y, alloc2)
logical :: alloc, alloc2
class(t), allocatable, intent(out) :: x(:)
class(t), allocatable, intent(out) :: y(:)
if (allocated (x)) stop 1
if (.not. alloc) stop 2
if (.not. alloc2) stop 3
end subroutine bar
end