! { dg-do compile } ! ! PR fortran/55763 ! subroutine sub() type t integer :: i end type t type(t), target :: tgt type(t), target, save :: tgt2(2) type t2a type(t), pointer :: cmp1 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } end type t2a type t2b class(t), pointer :: cmp2 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } end type t2b type t2c class(t), pointer :: cmp3 => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } end type t2c type t2d integer, pointer :: cmp4 => tgt%i ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } end type t2d type(t), pointer :: w => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } class(t), pointer :: x => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } class(*), pointer :: y => tgt ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } integer, pointer :: z => tgt%i ! { dg-error "Pointer initialization target at .1. must have the SAVE attribute" } end subroutine program main type t3 integer :: j end type t3 type(t3), target :: tgt type t4 type(t3), pointer :: cmp1 => tgt ! OK class(t3), pointer :: cmp2 => tgt ! OK class(t3), pointer :: cmp3 => tgt ! OK integer, pointer :: cmp4 => tgt%j ! OK end type t4 type(t3), target :: mytarget type(t3), pointer :: a => mytarget ! OK class(t3), pointer :: b => mytarget ! OK class(*), pointer :: c => mytarget ! OK integer, pointer :: d => mytarget%j ! OK end program main