! { dg-do run } ! PR fortran/85786 program test implicit none type :: p2d real, pointer :: p(:,:) => null() end type p2d type :: test_cs type(p2d), pointer :: v(:) => null() end type test_cs type(test_cs), pointer :: cs real, allocatable, target :: e(:,:) allocate(cs) if (associated(cs) .neqv. .true.) stop 1 allocate(cs%v(2)) if (associated(cs%v) .neqv. .true.) stop 2 allocate(e(2,2)) e = 42 if (query_ptr(e, cs) .neqv. .true.) stop 3 contains logical function query_ptr(f_ptr, cs) real, target, intent(in) :: f_ptr(:,:) type(test_cs), pointer, intent(inout) :: cs if (associated(cs)) then if (associated(cs%v) .neqv. .true.) stop 4 cs%v(2)%p => f_ptr if (associated(cs%v(2)%p) .neqv. .true.) stop 5 query_ptr = associated(cs%v(2)%p, f_ptr) else query_ptr = .false. end if end function query_ptr end program test