mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 16:16:39 +00:00

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
33 lines
1.1 KiB
Fortran
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
|