! { dg-do compile }
!
! PR fortran/52469
!
! This was failing as the DECL of the proc pointer "func"
! was used for the interface of the proc-pointer component "my_f_ptr"
! rather than the decl of the proc-pointer target
!
! Contributed by palott@gmail.com
!

module ExampleFuncs
  implicit none

  ! NOTE: "func" is a procedure pointer!
  pointer :: func
  interface
     function func (z)
        real :: func
        real, intent (in) :: z
     end function func
  end interface

  type Contains_f_ptr
     procedure (func), pointer, nopass :: my_f_ptr
  end type Contains_f_ptr
contains

function f1 (x)
  real :: f1
  real, intent (in) :: x

  f1 = 2.0 * x

  return
end function f1

function f2 (x)
   real :: f2
   real, intent (in) :: x

   f2 = 3.0 * x**2

   return
end function f2

function fancy (func, x)
   real :: fancy
   real, intent (in) :: x

   interface AFunc
      function func (y)
         real :: func
         real, intent (in) ::y
      end function func
   end interface AFunc

   fancy = func (x) + 3.3 * x
end function fancy

end module  ExampleFuncs


program test_proc_ptr
  use ExampleFuncs
  implicit none

  type (Contains_f_ptr), dimension (2) :: NewType
 
  !NewType(1) % my_f_ptr => f1
  NewType(2) % my_f_ptr => f2

  !write (*, *) NewType(1) % my_f_ptr (3.0), NewType(2) % my_f_ptr (3.0)
  write (6, *)  NewType(2) % my_f_ptr (3.0) ! < Shall print '27.0'

  stop
end program test_proc_ptr
