[flang] Fix portability warning that was incorrectly an "else if"
authorPeter Klausler <pklausler@nvidia.com>
Thu, 20 Jul 2023 19:37:25 +0000 (12:37 -0700)
committerPeter Klausler <pklausler@nvidia.com>
Fri, 21 Jul 2023 22:34:53 +0000 (15:34 -0700)
A semantics check for an assumed-length dummy procedure pointer was
inappropriately part of an "else" clause for a preceding check,
causing it to not be applied in all situations.

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

flang/lib/Semantics/check-declarations.cpp
flang/test/Semantics/call01.f90

index 337f1a0..d9259f4 100644 (file)
@@ -397,7 +397,8 @@ void CheckHelper::Check(const Symbol &symbol) {
         messages_.Say(
             "An assumed-length CHARACTER(*) function cannot return a POINTER"_err_en_US);
       }
-    } else if (IsProcedurePointer(symbol) && IsDummy(symbol)) {
+    }
+    if (IsProcedurePointer(symbol) && IsDummy(symbol)) {
       messages_.Say(
           "A dummy procedure pointer should not have assumed-length CHARACTER(*) result type"_port_en_US);
       // The non-dummy case is a hard error that's caught elsewhere.
index 40f7bef..dda1a7f 100644 (file)
@@ -118,16 +118,19 @@ function f14(n) result(res)
   end function nested
 end function
 
-subroutine s01(f1, f2, fp1, fp2)
+subroutine s01(f1, f2, fp1, fp2, fp3)
   !PORTABILITY: A dummy procedure pointer should not have assumed-length CHARACTER(*) result type
   character*(*) :: f1, f3, fp1
   external :: f1, f3
-  pointer :: fp1
+  pointer :: fp1, fp3
   !PORTABILITY: A dummy procedure pointer should not have assumed-length CHARACTER(*) result type
   procedure(character*(*)), pointer :: fp2
   interface
     character*(*) function f2()
     end function
+    !PORTABILITY: A dummy procedure pointer should not have assumed-length CHARACTER(*) result type
+    character*(*) function fp3()
+    end function
     !ERROR: A function interface may not declare an assumed-length CHARACTER(*) result
     character*(*) function f4()
     end function