[flang-commits] [flang] b4c8652 - [flang] Downgrade inappropriate error message to a warning

peter klausler via flang-commits flang-commits at lists.llvm.org
Tue Aug 31 11:28:53 PDT 2021


Author: peter klausler
Date: 2021-08-31T11:28:42-07:00
New Revision: b4c86525fdc33c9220a0234cb022d408749fe61c

URL: https://github.com/llvm/llvm-project/commit/b4c86525fdc33c9220a0234cb022d408749fe61c
DIFF: https://github.com/llvm/llvm-project/commit/b4c86525fdc33c9220a0234cb022d408749fe61c.diff

LOG: [flang] Downgrade inappropriate error message to a warning

It may not be great practice to pass a procedure (or procedure pointer)
with an implicit interface as an actual argument to correspond with
a dummy procedure (pointer), but it's not an error.  Change to a
warning, and modify tests accordingly.

Differential Revision: https://reviews.llvm.org/D108932

Added: 
    flang/test/Semantics/call21.f90

Modified: 
    flang/lib/Semantics/check-call.cpp
    flang/test/Semantics/call09.f90

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index ee0a4bfc59168..d47051522b4b6 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -553,9 +553,8 @@ static void CheckProcedureArg(evaluate::ActualArgument &arg,
                 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
index 6ecf07ead581e..c3398293c8eeb 100644
--- a/flang/test/Semantics/call09.f90
+++ b/flang/test/Semantics/call09.f90
@@ -58,9 +58,6 @@ subroutine test1 ! 15.5.2.9(5)
     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 @@ subroutine test1 ! 15.5.2.9(5)
     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 @@ subroutine test1 ! 15.5.2.9(5)
     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
index 0000000000000..4877551b58f63
--- /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


        


More information about the flang-commits mailing list