blob: e75b47c516bd88bbae8310812424cac895b59477 [file] [log] [blame]
! { dg-do run }
!
! Test the fix for PR86760 in which temporaries were not being
! assigned for array component references.
!
! Contributed by Chris Hansen <hansec@uw.edu>
!
MODULE test_nesting_mod
IMPLICIT NONE
TYPE :: test_obj1
CONTAINS
PROCEDURE :: destroy
END TYPE
TYPE :: obj_ptr
CLASS(test_obj1), POINTER :: f => NULL()
END TYPE
TYPE :: obj_container
TYPE(obj_ptr), POINTER, DIMENSION(:) :: v => NULL()
END TYPE
integer :: ctr = 0
CONTAINS
SUBROUTINE destroy(self)
CLASS(test_obj1), INTENT(INOUT):: self
ctr = ctr + 1
END SUBROUTINE
SUBROUTINE container_destroy(self)
type(obj_container), INTENT(INOUT) :: self
INTEGER :: i
DO i=1,ubound(self%v,1)
CALL self%v(i)%f%destroy()
END DO
END SUBROUTINE
END MODULE
PROGRAM test_nesting_ptr
USE test_nesting_mod
IMPLICIT NONE
INTEGER :: i
INTEGER, PARAMETER :: n = 2
TYPE(obj_container) :: var
ALLOCATE(var%v(n))
DO i=1,n
ALLOCATE(test_obj1::var%v(i)%f)
END DO
CALL container_destroy(var)
if (ctr .ne. 2) stop 1
END