! { dg-do compile } ! ! PR fortran/43591 ! ! Pureness check for TPB/PPC in specification expressions ! ! Based on a test case of Thorsten Ohl ! ! module m implicit none type t procedure(p1_type), nopass, pointer :: p1 => NULL() contains procedure, nopass :: tbp => p1_type end type t contains subroutine proc (t1, t2) type(t), intent(in) :: t1, t2 integer, dimension(t1%p1(), t2%tbp()) :: table end subroutine proc pure function p1_type() integer :: p1_type p1_type = 42 end function p1_type pure subroutine p(t1) type(t), intent(inout) :: t1 integer :: a(t1%p1()) end subroutine p end module m module m2 implicit none type t procedure(p1_type), nopass, pointer :: p1 => NULL() contains procedure, nopass :: tbp => p1_type end type t contains subroutine proc (t1, t2) type(t), intent(in) :: t1, t2 integer, dimension(t1%p1()) :: table1 ! { dg-error "must be PURE" } integer, dimension(t2%tbp()) :: table2 ! { dg-error "must be PURE" } end subroutine proc function p1_type() integer :: p1_type p1_type = 42 end function p1_type end module m2