xref: /llvm-project/flang/test/Semantics/assign12.f90 (revision f7e4304120506c9973a5ac939e06c106d8816911)
1036701a1SPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1
2036701a1SPeter Klauslermodule m
3036701a1SPeter Klausler  type base
4036701a1SPeter Klausler    procedure(baseSub), pointer :: baseComponent
5036701a1SPeter Klausler  end type
6036701a1SPeter Klausler  type, extends(base) :: extended
7036701a1SPeter Klausler  end type
8036701a1SPeter Klausler contains
9036701a1SPeter Klausler  subroutine baseSub(x)
10036701a1SPeter Klausler    class(base), intent(in) :: x
11036701a1SPeter Klausler  end
12036701a1SPeter Klausler  subroutine extendedSub(x)
13036701a1SPeter Klausler    class(extended), intent(in) :: x
14036701a1SPeter Klausler  end
15*f7e43041SPeter Klausler  subroutine baseSubmono(x)
16*f7e43041SPeter Klausler    type(base), intent(in) :: x
17*f7e43041SPeter Klausler  end
18036701a1SPeter Klausler  subroutine test
19036701a1SPeter Klausler    procedure(baseSub), pointer :: basePtr
20036701a1SPeter Klausler    procedure(extendedSub), pointer :: extendedPtr
21036701a1SPeter Klausler    type(extended) :: extendedVar
22036701a1SPeter Klausler    extendedPtr => baseSub ! ok
23036701a1SPeter Klausler    extendedPtr => basePtr ! ok
24036701a1SPeter Klausler    extendedVar = extended(baseSub) ! ok
25036701a1SPeter Klausler    extendedVar = extended(basePtr) ! ok
26036701a1SPeter Klausler    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
27036701a1SPeter Klausler    basePtr => extendedSub
28036701a1SPeter Klausler    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
29036701a1SPeter Klausler    basePtr => extendedPtr
30036701a1SPeter Klausler    !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedsub': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
31036701a1SPeter Klausler    extendedVar = extended(extendedSub)
32036701a1SPeter Klausler    !ERROR: Procedure pointer 'basecomponent' associated with incompatible procedure designator 'extendedptr': incompatible dummy argument #1: incompatible dummy data object types: CLASS(extended) vs CLASS(base)
33036701a1SPeter Klausler    extendedVar = extended(extendedPtr)
34*f7e43041SPeter Klausler    !ERROR: Procedure pointer 'baseptr' associated with incompatible procedure designator 'basesubmono': incompatible dummy argument #1: incompatible dummy data object polymorphism: base vs CLASS(base)
35*f7e43041SPeter Klausler    basePtr => baseSubmono
36036701a1SPeter Klausler  end
37036701a1SPeter Klauslerend
38