Files
clang-p2996/flang/test/Semantics/declarations05.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

43 lines
1.3 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! Other checks for declarations in PURE procedures
module m
type t0
end type
type t1
contains
final :: final
end type
type t2
type(t1), allocatable :: c
end type
type t3
class(t1), allocatable :: c
end type
type t4
class(t0), allocatable :: c
end type
contains
impure subroutine final(x)
type(t1) x
end
pure subroutine test
!ERROR: 'x0' may not be a local variable in a pure subprogram
!BECAUSE: 'x0' is polymorphic in a pure subprogram
class(t0), allocatable :: x0
!ERROR: 'x1' may not be a local variable in a pure subprogram
!BECAUSE: 'x1' has an impure FINAL procedure 'final'
type(t1) x1
!WARNING: 'x1a' of derived type 't1' does not have a FINAL subroutine for its rank (1)
type(t1), allocatable :: x1a(:)
!ERROR: 'x2' may not be a local variable in a pure subprogram
!BECAUSE: 'x2' has an impure FINAL procedure 'final'
type(t2) x2
!ERROR: 'x3' may not be a local variable in a pure subprogram
!BECAUSE: 'x3' has an impure FINAL procedure 'final'
type(t3) x3
!ERROR: 'x4' may not be a local variable in a pure subprogram
!BECAUSE: 'x4' has polymorphic component '%c' in a pure subprogram
type(t4) x4
end
end