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
37 lines
1.2 KiB
Fortran
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
|