xref: /llvm-project/flang/test/Semantics/pointer02.f90 (revision d20f55fbd5786f056ff8417bddc7c47df6c7f90b)
1*d20f55fbSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1
2*d20f55fbSPeter Klauslerrecursive subroutine sub(dp, dpp)
3*d20f55fbSPeter Klausler  procedure(inner) dp
4*d20f55fbSPeter Klausler  procedure(inner), pointer :: dpp
5*d20f55fbSPeter Klausler  procedure(inner) ext
6*d20f55fbSPeter Klausler  procedure(sub), pointer :: p1 => sub ! ok
7*d20f55fbSPeter Klausler  procedure(inner), pointer :: p2 => ext ! ok
8*d20f55fbSPeter Klausler  !ERROR: Procedure pointer 'p3' initializer 'inner' is neither an external nor a module procedure
9*d20f55fbSPeter Klausler  procedure(inner), pointer :: p3 => inner
10*d20f55fbSPeter Klausler  !ERROR: Procedure pointer 'p4' initializer 'dp' is neither an external nor a module procedure
11*d20f55fbSPeter Klausler  procedure(inner), pointer :: p4 => dp
12*d20f55fbSPeter Klausler  !ERROR: Procedure pointer 'p5' initializer 'dpp' is neither an external nor a module procedure
13*d20f55fbSPeter Klausler  procedure(inner), pointer :: p5 => dpp
14*d20f55fbSPeter Klausler  generic :: generic => ext
15*d20f55fbSPeter Klausler  !ERROR: 'generic' must be an abstract interface or a procedure with an explicit interface
16*d20f55fbSPeter Klausler  procedure(generic), pointer :: p6 ! => generic
17*d20f55fbSPeter Klausler contains
18*d20f55fbSPeter Klausler  subroutine inner
19*d20f55fbSPeter Klausler  end
20*d20f55fbSPeter Klauslerend
21*d20f55fbSPeter Klauslerrecursive function fun() result(res)
22*d20f55fbSPeter Klausler  procedure(fun), pointer :: p1 => fun ! ok
23*d20f55fbSPeter Klausler  !ERROR: Procedure pointer 'p2' initializer 'inner' is neither an external nor a module procedure
24*d20f55fbSPeter Klausler  procedure(inner), pointer :: p2 => inner
25*d20f55fbSPeter Klausler  res = 0.
26*d20f55fbSPeter Klausler contains
27*d20f55fbSPeter Klausler  function inner()
28*d20f55fbSPeter Klausler    inner = 0.
29*d20f55fbSPeter Klausler  end
30*d20f55fbSPeter Klauslerend
31*d20f55fbSPeter Klauslermodule m
32*d20f55fbSPeter Klausler  procedure(msub), pointer :: ps1 => msub ! ok
33*d20f55fbSPeter Klausler  procedure(mfun), pointer :: pf1 => mfun ! ok
34*d20f55fbSPeter Klausler contains
35*d20f55fbSPeter Klausler  recursive subroutine msub
36*d20f55fbSPeter Klausler    procedure(msub), pointer :: ps2 => msub ! ok
37*d20f55fbSPeter Klausler    !ERROR: Procedure pointer 'ps3' initializer 'inner' is neither an external nor a module procedure
38*d20f55fbSPeter Klausler    procedure(inner), pointer :: ps3 => inner
39*d20f55fbSPeter Klausler   contains
40*d20f55fbSPeter Klausler    subroutine inner
41*d20f55fbSPeter Klausler    end
42*d20f55fbSPeter Klausler  end
43*d20f55fbSPeter Klausler  recursive function mfun() result(res)
44*d20f55fbSPeter Klausler    procedure(mfun), pointer :: pf2 => mfun ! ok
45*d20f55fbSPeter Klausler    !ERROR: Procedure pointer 'pf3' initializer 'inner' is neither an external nor a module procedure
46*d20f55fbSPeter Klausler    procedure(inner), pointer :: pf3 => inner
47*d20f55fbSPeter Klausler    res = 0.
48*d20f55fbSPeter Klausler   contains
49*d20f55fbSPeter Klausler    function inner()
50*d20f55fbSPeter Klausler      inner = 0.
51*d20f55fbSPeter Klausler    end
52*d20f55fbSPeter Klausler  end
53*d20f55fbSPeter Klauslerend
54