[flang-commits] [PATCH] D127019: [flang] Distinguish intrinsic module USE in module files; correct search paths

Peter Klausler via Phabricator via flang-commits flang-commits at lists.llvm.org
Fri Jun 3 22:08:02 PDT 2022


This revision was automatically updated to reflect the committed changes.
Closed by commit rG15faac900d3b: [flang] Distinguish intrinsic module USE in module files; correct search paths (authored by klausler).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127019

Files:
  flang/lib/Parser/parsing.cpp
  flang/lib/Semantics/mod-file.cpp
  flang/test/Semantics/modfile36.f90


Index: flang/test/Semantics/modfile36.f90
===================================================================
--- flang/test/Semantics/modfile36.f90
+++ flang/test/Semantics/modfile36.f90
@@ -14,7 +14,7 @@
 !module m1
 ! interface
 !  subroutine s(x)
-!   use iso_c_binding, only: c_ptr
+!   use,intrinsic::iso_c_binding, only: c_ptr
 !   type(c_ptr) :: x
 !  end
 ! end interface
@@ -31,7 +31,7 @@
 end module
 !Expect: m2.mod
 !module m2
-! use iso_c_binding,only:c_ptr
+! use,intrinsic::iso_c_binding,only:c_ptr
 ! interface
 !  subroutine s(x)
 !   import::c_ptr
Index: flang/lib/Semantics/mod-file.cpp
===================================================================
--- flang/lib/Semantics/mod-file.cpp
+++ flang/lib/Semantics/mod-file.cpp
@@ -518,8 +518,14 @@
 void ModFileWriter::PutUse(const Symbol &symbol) {
   auto &details{symbol.get<UseDetails>()};
   auto &use{details.symbol()};
-  uses_ << "use " << GetUsedModule(details).name();
-  PutGenericName(uses_ << ",only:", symbol);
+  const Symbol &module{GetUsedModule(details)};
+  if (use.owner().parent().IsIntrinsicModules()) {
+    uses_ << "use,intrinsic::";
+  } else {
+    uses_ << "use ";
+  }
+  uses_ << module.name() << ",only:";
+  PutGenericName(uses_, symbol);
   // Can have intrinsic op with different local-name and use-name
   // (e.g. `operator(<)` and `operator(.lt.)`) but rename is not allowed
   if (!IsIntrinsicOp(symbol) && use.name() != symbol.name()) {
@@ -953,6 +959,7 @@
       std::remove(options.searchDirectories.begin(),
           options.searchDirectories.end(), dir);
     }
+    options.searchDirectories.insert(options.searchDirectories.begin(), "."s);
   }
   if (isIntrinsic.value_or(true)) {
     for (const auto &dir : context_.intrinsicModuleDirectories()) {
Index: flang/lib/Parser/parsing.cpp
===================================================================
--- flang/lib/Parser/parsing.cpp
+++ flang/lib/Parser/parsing.cpp
@@ -35,9 +35,12 @@
   const SourceFile *sourceFile;
   if (path == "-") {
     sourceFile = allSources.ReadStandardInput(fileError);
+  } else if (options.isModuleFile) {
+    // Don't mess with intrinsic module search path
+    sourceFile = allSources.Open(path, fileError);
   } else {
-    std::optional<std::string> currentDirectory{"."};
-    sourceFile = allSources.Open(path, fileError, std::move(currentDirectory));
+    sourceFile =
+        allSources.Open(path, fileError, "."s /*prepend to search path*/);
   }
   if (!fileError.str().empty()) {
     ProvenanceRange range{allSources.AddCompilerInsertion(path)};


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127019.434241.patch
Type: text/x-patch
Size: 2565 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220604/fcc98bfa/attachment.bin>


More information about the flang-commits mailing list