| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| module m |
| type base |
| procedure(baseSub), pointer :: baseComponent |
| end type |
| type, extends(base) :: extended |
| end type |
| contains |
| subroutine baseSub(x) |
| class(base), intent(in) :: x |
| end |
| subroutine extendedSub(x) |
| class(extended), intent(in) :: x |
| end |
| subroutine baseSubmono(x) |
| type(base), intent(in) :: x |
| end |
| subroutine test |
| procedure(baseSub), pointer :: basePtr |
| procedure(extendedSub), pointer :: extendedPtr |
| type(extended) :: extendedVar |
| extendedPtr => baseSub ! ok |
| extendedPtr => basePtr ! ok |
| extendedVar = extended(baseSub) ! ok |
| extendedVar = extended(basePtr) ! ok |
| !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base) |
| basePtr => extendedSub |
| !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base) |
| basePtr => extendedPtr |
| !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base) |
| extendedVar = extended(extendedSub) |
| !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base) |
| extendedVar = extended(extendedPtr) |
| !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'basesubmono': incompatible dummy argument #1: incompatible dummy data object polymorphism: base vs CLASS(base) |
| basePtr => baseSubmono |
| end |
| end |