The test for compatible function results needs to be nearly strict equality of their types, not the usual actual/dummy type compatibility test used in other situations. The exceptional case is that assumed length CHARACTER function results are compatible with explicit length results of the same kind. In particular, a function returning a polymorphic pointer is not compatible with a function returning a monomorphic pointer even of the same declared type. Differential Revision: https://reviews.llvm.org/D145094
39 lines
1000 B
Fortran
39 lines
1000 B
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
|
|
! Test that the interface of specific intrinsics passed as dummy arguments
|
|
! are correctly validated against actual arguments explicit interface.
|
|
|
|
intrinsic :: abs, dabs
|
|
interface
|
|
subroutine foo(f)
|
|
interface
|
|
function f(x)
|
|
real :: f
|
|
real, intent(in) :: x
|
|
end function
|
|
end interface
|
|
end subroutine
|
|
|
|
subroutine foo2(f)
|
|
interface
|
|
function f(x)
|
|
double precision :: f
|
|
double precision, intent(in) :: x
|
|
end function
|
|
end interface
|
|
end subroutine
|
|
end interface
|
|
|
|
! OK
|
|
call foo(abs)
|
|
|
|
! OK
|
|
call foo2(dabs)
|
|
|
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 'f=': function results have distinct types: REAL(4) vs REAL(8)
|
|
call foo(dabs)
|
|
|
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 'f=': function results have distinct types: REAL(8) vs REAL(4)
|
|
call foo2(abs)
|
|
end
|