! { dg-do run } ! ! Test the fix for PR86760 in which temporaries were not being ! assigned for array component references. ! ! Contributed by Chris Hansen ! 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