llvm/flang/test/Semantics/declarations06.f90

! RUN: %python %S/test_errors.py %s %flang_fc1
! A CLASS() entity must be a dummy argument, allocatable,
! or object pointer.  Don't get confused with procedure pointers.
module m
  type t
  end type
  !ERROR: CLASS entity 'v1' must be a dummy argument, allocatable, or object pointer
  class(t) v1
  class(t), allocatable :: v2 ! ok
  class(t), pointer :: v3 ! ok
  !ERROR: CLASS entity 'p1' must be a dummy argument, allocatable, or object pointer
  procedure(cf1) :: p1
  procedure(cf2) :: p2
  procedure(cf3) :: p3
  !ERROR: CLASS entity 'pp1' must be a dummy argument, allocatable, or object pointer
  procedure(cf1), pointer :: pp1
  procedure(cf2), pointer :: pp2
  procedure(cf3), pointer :: pp3
  procedure(cf5), pointer :: pp4 ! ok
 contains
  !ERROR: CLASS entity 'cf1' must be a dummy argument, allocatable, or object pointer
  class(t) function cf1()
  end
  class(t) function cf2()
    allocatable cf2 ! ok
  end
  class(t) function cf3()
    pointer cf3 ! ok
  end
  subroutine test(d1,d2,d3)
    class(t) d1 ! ok
    !ERROR: CLASS entity 'd2' must be a dummy argument, allocatable, or object pointer
    class(t), external :: d2
    !ERROR: CLASS entity 'd3' must be a dummy argument, allocatable, or object pointer
    class(t), external, pointer :: d3
  end
  function cf4()
    class(t), pointer :: cf4
    cf4 => v3
  end
  function cf5
    procedure(cf4), pointer :: cf5
    cf5 => cf4
  end
end