! { dg-do run } ! ! Test the fix for PR100132 ! module main_m implicit none private public :: & foo_t public :: & set, & get type :: foo_t integer :: i end type foo_t type(foo_t), save, pointer :: data => null() contains subroutine set(this) class(foo_t), pointer, intent(in) :: this if(associated(data)) stop 1 data => this end subroutine set subroutine get(this) type(foo_t), pointer, intent(out) :: this if(.not.associated(data)) stop 4 this => data nullify(data) end subroutine get end module main_m program main_p use :: main_m, only: & foo_t, set, get implicit none integer, parameter :: n = 1000 type(foo_t), pointer :: ps type(foo_t), target :: s integer :: i, j, yay, nay yay = 0 nay = 0 do i = 1, n s%i = i call set(s) call get(ps) if(.not.associated(ps)) stop 13 j = ps%i if(i/=j) stop 14 if(i/=s%i) stop 15 if(ps%i/=s%i) stop 16 if(associated(ps, s))then yay = yay + 1 else nay = nay + 1 end if end do if((yay/=n).or.(nay/=0)) stop 17 end program main_p