diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp --- a/flang/lib/Semantics/check-call.cpp +++ b/flang/lib/Semantics/check-call.cpp @@ -553,9 +553,8 @@ 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) diff --git a/flang/test/Semantics/call09.f90 b/flang/test/Semantics/call09.f90 --- a/flang/test/Semantics/call09.f90 +++ b/flang/test/Semantics/call09.f90 @@ -58,9 +58,6 @@ 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 @@ -79,8 +76,6 @@ 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 @@ -94,10 +89,6 @@ 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) diff --git a/flang/test/Semantics/call21.f90 b/flang/test/Semantics/call21.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Semantics/call21.f90 @@ -0,0 +1,31 @@ +! 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