| ! RUN: %python %S/test_errors.py %s %flang_fc1 | |
| module m | |
| type dt | |
| procedure(explicit), pointer, nopass :: p | |
| end type | |
| contains | |
| integer function one() | |
| one = 1 | |
| end | |
| function onePtr() | |
| procedure(one), pointer :: onePtr | |
| onePtr => one | |
| end | |
| function explicit | |
| character(:), allocatable :: explicit | |
| explicit = "abc" | |
| end | |
| end | |
| program test | |
| use m | |
| procedure(), pointer :: p0 | |
| procedure(one), pointer :: p1 | |
| procedure(integer), pointer :: p2 | |
| procedure(explicit), pointer :: p3 | |
| external implicit | |
| type(dt) x | |
| p0 => one ! ok | |
| p0 => onePtr() ! ok | |
| p0 => implicit ! ok | |
| !ERROR: Procedure pointer 'p0' with implicit interface may not be associated with procedure designator 'explicit' with explicit interface that cannot be called via an implicit interface | |
| p0 => explicit | |
| p1 => one ! ok | |
| p1 => onePtr() ! ok | |
| p1 => implicit ! ok | |
| !ERROR: Function pointer 'p1' associated with incompatible function designator 'explicit': function results have incompatible attributes | |
| p1 => explicit | |
| p2 => one ! ok | |
| p2 => onePtr() ! ok | |
| p2 => implicit ! ok | |
| !ERROR: Function pointer 'p2' associated with incompatible function designator 'explicit': function results have incompatible attributes | |
| p2 => explicit | |
| !ERROR: Function pointer 'p3' associated with incompatible function designator 'one': function results have incompatible attributes | |
| p3 => one | |
| !ERROR: Procedure pointer 'p3' associated with result of reference to function 'oneptr' that is an incompatible procedure pointer: function results have incompatible attributes | |
| p3 => onePtr() | |
| p3 => explicit ! ok | |
| !ERROR: Procedure pointer 'p3' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface | |
| p3 => implicit | |
| !ERROR: Procedure pointer 'p' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface | |
| x = dt(implicit) | |
| !ERROR: Procedure pointer 'p' with explicit interface that cannot be called via an implicit interface cannot be associated with procedure designator with an implicit interface | |
| x%p => implicit | |
| end |