Peter Klausler 2f999cce19 [flang] Respect function vs subroutine distinction in generic matching
When checking the specific procedures of a generic interface for a
match against a given set of actual arguments, be sure to not match
a function against a subroutine call or vice versa.  (We generally
catch and warn about attempts to declare mixed interfaces, but they
are usually conforming and can be inadvertently created when generics
are merged due to USE and host association.)

Differential Revision: https://reviews.llvm.org/D139059
2022-12-03 07:53:04 -08:00

35 lines
829 B
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
! Exercise function vs subroutine distinction in generics
module m1
type t1
integer n
end type
interface g1
integer function f1(x, j)
import t1
class(t1), intent(in out) :: x
integer, intent(in) :: j
end
end interface
end module
program test
use m1
!WARNING: Generic interface 'g1' has both a function and a subroutine
interface g1
subroutine s1(x, a)
import t1
class(t1), intent(in out) :: x
real, intent(in) :: a
end subroutine
end interface
type(t1) :: x
print *, g1(x,1) ! ok
!ERROR: No specific function of generic 'g1' matches the actual arguments
print *, g1(x,1.)
!ERROR: No specific subroutine of generic 'g1' matches the actual arguments
call g1(x,1)
call g1(x, 1.) ! ok
contains
end