llvm/flang/test/Semantics/assign12.f90

! 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