Files
clang-p2996/flang/test/Semantics/declarations06.f90
Peter Klausler 0bb3260b7c [flang] Fix constraint check on CLASS() entities
Entities declared with CLASS() must be dummy arguments, allocatables,
or pointers.  This constraint check is currently correct for objects
but not for procedures, and getting it right needs to avoid being
confused between pointers to procedures and pointers returned by
procedures.

Differential Revision: https://reviews.llvm.org/D155491
2023-07-17 12:19:30 -07:00

37 lines
1.2 KiB
Fortran

! 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
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
end