Files
clang-p2996/flang/test/Semantics/procinterface04.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
954 B
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine test(dp1, dp2)
intrinsic sin
interface
elemental real function elemental(x)
real, intent(in) :: x
end
pure real function nonelemental(x)
real, intent(in) :: x
end
end interface
!PORTABILITY: A dummy procedure should not have an ELEMENTAL intrinsic as its interface
procedure(sin) :: dp1
!ERROR: A dummy procedure may not be ELEMENTAL
procedure(elemental) :: dp2
!PORTABILITY: Procedure pointer 'pp1' should not have an ELEMENTAL intrinsic as its interface
procedure(sin), pointer :: pp1
!ERROR: Procedure pointer 'pp2' may not be ELEMENTAL
procedure(elemental), pointer :: pp2
procedure(elemental) :: pp3 ! ok, external
procedure(nonelemental), pointer :: pp4 => sin ! ok, special case
!ERROR: Procedure pointer 'pp5' cannot be initialized with the elemental procedure 'elemental'
procedure(nonelemental), pointer :: pp5 => elemental
end