! { dg-do compile } ! { dg-options "-fcoarray=single" } ! ! PR fortran/51605 ! subroutine one() type t end type t ! (a) Invalid (was ICEing before) class(t), target :: p1 ! { dg-error "must be dummy, allocatable or pointer" } class(t), pointer :: p2 select type(p1) type is(t) p2 => p1 class is(t) p2 => p1 end select end subroutine one subroutine two() type t end type t class(t), allocatable, target :: p1 ! (b) Valid class(t), pointer :: p2 select type(p1) type is(t) p2 => p1 class is(t) p2 => p1 end select end subroutine two subroutine three() type t end type t class(t), allocatable :: p1 ! (c) Invalid as not TARGET class(t), pointer :: p2 select type(p1) type is(t) p2 => p1 ! { dg-error "Pointer assignment target is neither TARGET nor POINTER" } class is(t) p2 => p1 ! { dg-error "Pointer assignment target is neither TARGET nor POINTER" } end select end subroutine three subroutine four() type t end type t class(t), pointer :: p1 ! (d) Valid class(t), pointer :: p2 select type(p1) type is(t) p2 => p1 class is(t) p2 => p1 end select end subroutine four subroutine caf(x) type t end type t class(t) :: x[*] select type(x) type is(t) end select end subroutine caf