messages.Say(
"Actual procedure argument has an implicit interface "
"which is not known to be compatible with %s which has an "
- "explicit interface"_err_en_US,
+ "explicit interface"_en_US,
dummyName);
- return;
}
}
} else { // 15.5.2.9(2,3)
procedure(realfunc), pointer :: p
procedure(intfunc), pointer :: ip
integer, pointer :: intPtr
- external :: extfunc
- external :: extfuncPtr
- pointer :: extfuncPtr
p => realfunc
ip => intfunc
call s01(realfunc) ! ok
call s01(null(intPtr))
!ERROR: Actual argument associated with procedure dummy argument 'p=' is typeless
call s01(B"0101")
- !ERROR: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p=' which has an explicit interface
- call s01(extfunc)
!ERROR: Actual argument associated with procedure pointer dummy argument 'p=' must be a POINTER unless INTENT(IN)
call s02(realfunc)
call s02(p) ! ok
call s02(null(p))
!ERROR: Actual argument associated with procedure pointer dummy argument 'p=' must be a POINTER unless INTENT(IN)
call s02(sin)
- !ERROR: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p=' which has an explicit interface
- call s02(extfunc)
- !ERROR: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p=' which has an explicit interface
- call s03(extfuncPtr)
end subroutine
subroutine callsub(s)
--- /dev/null
+! RUN: %flang -fsyntax-only 2>&1 %s | FileCheck %s
+! Verifies that warnings issue when actual arguments with implicit
+! interfaces are associated with dummy procedures and dummy procedure
+! pointers whose interfaces are explicit.
+module m
+ contains
+ real function realfunc(x)
+ real, intent(in) :: x
+ realfunc = x
+ end function
+ subroutine s00(p0)
+ procedure(realfunc) :: p0
+ end subroutine
+ subroutine s01(p1)
+ procedure(realfunc), pointer, intent(in) :: p1
+ end subroutine
+ subroutine s02(p2)
+ procedure(realfunc), pointer :: p2
+ end subroutine
+ subroutine test
+ external :: extfunc
+ external :: extfuncPtr
+ pointer :: extfuncPtr
+ !CHECK: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p0=' which has an explicit interface
+ call s00(extfunc)
+ !CHECK: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p1=' which has an explicit interface
+ call s01(extfunc)
+ !CHECK: Actual procedure argument has an implicit interface which is not known to be compatible with dummy argument 'p2=' which has an explicit interface
+ call s02(extfuncPtr)
+ end subroutine
+end module