Some procedure pointers and EXTERNAL procedures have neither explicit interfaces nor result types; these procedures are obviously not known to be functions, but they could be, so semantics must not assume that they are necessarily subroutines. Refine the procedure pointer / dummy procedure compatibility check to handle these more ambiguous cases and not elicit inappropriate error messages. Differential Revision: https://reviews.llvm.org/D129674
39 lines
1008 B
Fortran
39 lines
1008 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 incompatible types: REAL(4) vs REAL(8)
|
|
call foo(dabs)
|
|
|
|
!ERROR: Actual procedure argument has interface incompatible with dummy argument 'f=': function results have incompatible types: REAL(8) vs REAL(4)
|
|
call foo2(abs)
|
|
end
|