1! { dg-do compile }
2!
3! PR 80046: [F03] Explicit interface required: pointer argument
4!
5! Contributed by Joachim Herb <joachim.herb@gmx.de>
6
7program p
8  implicit none
9
10  type :: Node_t
11    procedure(NodeCloner), nopass, pointer :: cloneProc => NULL()
12    procedure(), nopass, pointer :: noIfc => NULL()
13  end type
14
15  interface
16    subroutine NodeCloner( tgt, src )
17      import Node_t
18      type(Node_t), pointer, intent(out) :: tgt
19      type(Node_t),           intent(in) :: src
20    end subroutine
21  end interface
22
23  type(Node_t) :: node
24  procedure(NodeCloner), pointer :: cloneNode
25  procedure(), pointer :: noIfc
26
27  cloneNode => node%noIfc       ! { dg-error "Explicit interface required" }
28  node%noIfc => cloneNode       ! { dg-error "Explicit interface required" }
29
30  noIfc => node%cloneProc       ! { dg-error "Explicit interface required" }
31  node%cloneProc => noIfc       ! { dg-error "Explicit interface required" }
32
33  node%cloneProc => node%noIfc  ! { dg-error "Explicit interface required" }
34  node%noIfc => node%cloneProc  ! { dg-error "Explicit interface required" }
35
36  ! the following cases are legal
37
38  node%noIfc => node%noIfc
39  node%cloneProc => node%cloneProc
40
41  cloneNode => node%cloneProc
42  node%cloneProc => cloneNode
43
44  noIfc => node%noIfc
45  node%noIfc => noIfc
46
47end
48