xref: /llvm-project/flang/test/Semantics/assign12.f90 (revision f7e4304120506c9973a5ac939e06c106d8816911)
1! RUN: %python %S/test_errors.py %s %flang_fc1
2module m
3  type base
4    procedure(baseSub), pointer :: baseComponent
5  end type
6  type, extends(base) :: extended
7  end type
8 contains
9  subroutine baseSub(x)
10    class(base), intent(in) :: x
11  end
12  subroutine extendedSub(x)
13    class(extended), intent(in) :: x
14  end
15  subroutine baseSubmono(x)
16    type(base), intent(in) :: x
17  end
18  subroutine test
19    procedure(baseSub), pointer :: basePtr
20    procedure(extendedSub), pointer :: extendedPtr
21    type(extended) :: extendedVar
22    extendedPtr => baseSub ! ok
23    extendedPtr => basePtr ! ok
24    extendedVar = extended(baseSub) ! ok
25    extendedVar = extended(basePtr) ! ok
26    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
27    basePtr => extendedSub
28    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
29    basePtr => extendedPtr
30    !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
31    extendedVar = extended(extendedSub)
32    !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
33    extendedVar = extended(extendedPtr)
34    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'basesubmono': incompatible dummy argument #1: incompatible dummy data object polymorphism: base vs CLASS(base)
35    basePtr => baseSubmono
36  end
37end
38