mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:36:37 +00:00

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
35 lines
829 B
Fortran
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
|