Files
clang-p2996/flang/test/Semantics/procinterface02.f90
Peter Klausler 0c0b2ea988 [flang] Check procedure pointer initializations; clean up ELEMENTAL
Implements compatibility checking for initializers in procedure pointer
declarations.  This work exposed some inconsistency in how ELEMENTAL
interfaces were handled and checked, from both unrestricted intrinsic
functions and others, and some refinements needed for function result
compatbility checking; these have also been ironed out.  Some new
warnings are now emitted, and this affected a dozen or so tests.

Differential Revision: https://reviews.llvm.org/D159026
2023-08-29 15:08:23 -07:00

25 lines
914 B
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine foo(A, B, P)
interface
real elemental function foo_elemental(x)
real, intent(in) :: x
end function
pure real function foo_pure(x)
real, intent(in) :: x
end function
real function foo_nonelemental(x)
real, intent(in) :: x
end function
end interface
real :: A(:), B(:)
!PORTABILITY: A dummy procedure should not have an ELEMENTAL intrinsic as its interface
procedure(sqrt), pointer :: P
!ERROR: Rank of dummy argument is 0, but actual argument has rank 1
A = P(B)
!ERROR: Procedure pointer 'p' associated with incompatible procedure designator 'foo_elemental': incompatible procedure attributes: Elemental
P => foo_elemental
P => foo_pure ! ok
!ERROR: PURE procedure pointer 'p' may not be associated with non-PURE procedure designator 'foo_nonelemental'
P => foo_nonelemental
end subroutine