| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| recursive subroutine sub(dp, dpp) |
| procedure(inner) dp |
| procedure(inner), pointer :: dpp |
| procedure(inner) ext |
| procedure(sub), pointer :: p1 => sub ! ok |
| procedure(inner), pointer :: p2 => ext ! ok |
| !ERROR: Procedure pointer 'p3' initializer 'inner' is neither an external nor a module procedure |
| procedure(inner), pointer :: p3 => inner |
| !ERROR: Procedure pointer 'p4' initializer 'dp' is neither an external nor a module procedure |
| procedure(inner), pointer :: p4 => dp |
| !ERROR: Procedure pointer 'p5' initializer 'dpp' is neither an external nor a module procedure |
| procedure(inner), pointer :: p5 => dpp |
| generic :: generic => ext |
| !ERROR: 'generic' must be an abstract interface or a procedure with an explicit interface |
| procedure(generic), pointer :: p6 ! => generic |
| contains |
| subroutine inner |
| end |
| end |
| recursive function fun() result(res) |
| procedure(fun), pointer :: p1 => fun ! ok |
| !ERROR: Procedure pointer 'p2' initializer 'inner' is neither an external nor a module procedure |
| procedure(inner), pointer :: p2 => inner |
| res = 0. |
| contains |
| function inner() |
| inner = 0. |
| end |
| end |
| module m |
| procedure(msub), pointer :: ps1 => msub ! ok |
| procedure(mfun), pointer :: pf1 => mfun ! ok |
| contains |
| recursive subroutine msub |
| procedure(msub), pointer :: ps2 => msub ! ok |
| !ERROR: Procedure pointer 'ps3' initializer 'inner' is neither an external nor a module procedure |
| procedure(inner), pointer :: ps3 => inner |
| contains |
| subroutine inner |
| end |
| end |
| recursive function mfun() result(res) |
| procedure(mfun), pointer :: pf2 => mfun ! ok |
| !ERROR: Procedure pointer 'pf3' initializer 'inner' is neither an external nor a module procedure |
| procedure(inner), pointer :: pf3 => inner |
| res = 0. |
| contains |
| function inner() |
| inner = 0. |
| end |
| end |
| end |