llvm-project/flang/test/Semantics/deallocate07.f90
Peter Klausler e9a8ab004c [flang] Use definability tests for better PURE constraint checking
Many semantic checks for constraints related to PURE subprograms
can be implemented in terms of Semantics' "definable.h" utilities,
slightly expanded.  Replace some particular PURE constraint
checks with calls to WhyNotDefinable(), except for cases that
had better specific error messages, and start checking some
missing constraints with DEALLOCATE statements and local
variable declarations.

Differential Revision: https://reviews.llvm.org/D147389
2023-04-03 07:00:07 -07:00

33 lines
1.1 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
module m
type t1
end type
type t2
class(t2), allocatable :: pc
end type
class(t1), pointer :: mp1
type(t2) :: mv1
contains
pure subroutine subr(pp1, pp2, mp2)
class(t1), intent(in out), pointer :: pp1
class(t2), intent(in out) :: pp2
type(t2), pointer :: mp2
!ERROR: Name in DEALLOCATE statement is not definable
!BECAUSE: 'mp1' may not be defined in pure subprogram 'subr' because it is host-associated
deallocate(mp1)
!ERROR: Name in DEALLOCATE statement is not definable
!BECAUSE: 'mv1' may not be defined in pure subprogram 'subr' because it is host-associated
deallocate(mv1%pc)
!ERROR: Object in DEALLOCATE statement is not deallocatable
!BECAUSE: 'pp1' is polymorphic in a pure subprogram
deallocate(pp1)
!ERROR: Object in DEALLOCATE statement is not deallocatable
!BECAUSE: 'pc' is polymorphic in a pure subprogram
deallocate(pp2%pc)
!ERROR: Object in DEALLOCATE statement is not deallocatable
!BECAUSE: 'mp2' has polymorphic component '%pc' in a pure subprogram
deallocate(mp2)
end subroutine
end module