[flang-commits] [PATCH] D155963: [flang] Support implicit global external as procedure pointer target

Peter Klausler via Phabricator via flang-commits flang-commits at lists.llvm.org
Fri Jul 21 12:08:42 PDT 2023


This revision was automatically updated to reflect the committed changes.
Closed by commit rGccd78958f696: [flang] Support implicit global external as procedure pointer target (authored by klausler).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155963/new/

https://reviews.llvm.org/D155963

Files:
  flang/lib/Semantics/resolve-names.cpp
  flang/test/Semantics/assign09.f90


Index: flang/test/Semantics/assign09.f90
===================================================================
--- flang/test/Semantics/assign09.f90
+++ flang/test/Semantics/assign09.f90
@@ -41,6 +41,10 @@
   !ERROR: Actual procedure argument has interface incompatible with dummy argument 'p=': incompatible dummy argument #1: incompatible dummy data object types: REAL(4) vs INTEGER(4)
   call sub3(sqrt)
 
+  print *, implicitExtFunc()
+  call implicitExtSubr
+  noInterfaceProcPtr => implicitExtFunc ! ok
+  noInterfaceProcPtr => implicitExtSubr ! ok
   noInterfaceProcPtr => noInterfaceExternal ! ok
   realToRealProcPtr => noInterfaceExternal ! ok
   intToRealProcPtr => noInterfaceExternal !ok
Index: flang/lib/Semantics/resolve-names.cpp
===================================================================
--- flang/lib/Semantics/resolve-names.cpp
+++ flang/lib/Semantics/resolve-names.cpp
@@ -7519,8 +7519,9 @@
                    currScope().context().GetPPCBuiltinsScope()) {
       // Check if it is a builtin from the predefined module
       symbol = FindSymbol(*ppcBuiltinScope, name);
-      if (!symbol)
+      if (!symbol) {
         symbol = &MakeSymbol(context().globalScope(), name.source, Attrs{});
+      }
     } else {
       symbol = &MakeSymbol(context().globalScope(), name.source, Attrs{});
     }
@@ -8030,6 +8031,15 @@
       }
       return false;
     }
+    // Can also reference a global external procedure here
+    if (auto it{context().globalScope().find(name->source)};
+        it != context().globalScope().end()) {
+      Symbol &global{*it->second};
+      if (IsProcedure(global)) {
+        Resolve(*name, global);
+        return false;
+      }
+    }
   }
   Walk(expr);
   return false;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155963.543020.patch
Type: text/x-patch
Size: 1734 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230721/e4821248/attachment-0001.bin>


More information about the flang-commits mailing list