! { dg-do run } ! ! PR fortran/57530 ! ! ! TYPE => CLASS pointer assignment for variables ! module m implicit none type t integer :: ii = 55 end type t contains subroutine sub (tgt, tgt2) class(t), target :: tgt, tgt2(:) type(t), pointer :: ptr, ptr2(:), ptr3(:,:) if (tgt%ii /= 43) STOP 1 if (size (tgt2) /= 3) STOP 2 if (any (tgt2(:)%ii /= [11,22,33])) STOP 3 ptr => tgt ! TYPE => CLASS ptr2 => tgt2 ! TYPE => CLASS ptr3(-3:-3,1:3) => tgt2 ! TYPE => CLASS if (.not. associated(ptr)) STOP 4 if (.not. associated(ptr2)) STOP 5 if (.not. associated(ptr3)) STOP 6 if (.not. associated(ptr,tgt)) STOP 7 if (.not. associated(ptr2,tgt2)) STOP 8 if (ptr%ii /= 43) STOP 9 if (size (ptr2) /= 3) STOP 10 if (size (ptr3) /= 3) STOP 11 if (any (ptr2(:)%ii /= [11,22,33])) STOP 12 if (any (shape (ptr3) /= [1,3])) STOP 13 if (any (ptr3(-3,:)%ii /= [11,22,33])) STOP 14 end subroutine sub end module m use m type(t), target :: x type(t), target :: y(3) x%ii = 43 y(:)%ii = [11,22,33] call sub(x,y) end