diff options
author | Peter Klausler <pklausler@nvidia.com> | 2022-05-30 12:47:32 -0700 |
---|---|---|
committer | Peter Klausler <pklausler@nvidia.com> | 2022-06-03 22:07:44 -0700 |
commit | 15faac900d3b4fc17a04b3b9de421fab1bbe33db (patch) | |
tree | 204e6423b3a1b4b2bd0da870feaf7b12be7ed9fb /flang/lib/Semantics/mod-file.cpp | |
parent | 72f9c69421fce893ac9b4ca9144b064cddc79cd8 (diff) | |
download | llvm-15faac900d3b4fc17a04b3b9de421fab1bbe33db.zip llvm-15faac900d3b4fc17a04b3b9de421fab1bbe33db.tar.gz llvm-15faac900d3b4fc17a04b3b9de421fab1bbe33db.tar.bz2 |
[flang] Distinguish intrinsic module USE in module files; correct search paths
In the USE statements that f18 emits to module files, ensure that symbols
from intrinsic modules are marked as such on their USE statements. And
ensure that the current working directory (".") cannot override the intrinsic
module search path when trying to locate an intrinsic module.
Differential Revision: https://reviews.llvm.org/D127019
Diffstat (limited to 'flang/lib/Semantics/mod-file.cpp')
-rw-r--r-- | flang/lib/Semantics/mod-file.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/flang/lib/Semantics/mod-file.cpp b/flang/lib/Semantics/mod-file.cpp index 2ba8918..d97b817 100644 --- a/flang/lib/Semantics/mod-file.cpp +++ b/flang/lib/Semantics/mod-file.cpp @@ -518,8 +518,14 @@ void ModFileWriter::PutGeneric(const Symbol &symbol) { 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 @@ Scope *ModFileReader::Read(const SourceName &name, 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()) { |