[flang-commits] [PATCH] D131104: [flang] Don't inherit ELEMENTAL attribute from intrinsics for TBP bindings
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Tue Aug 9 08:09:47 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rG5e8094bae50b: [flang] Don't inherit ELEMENTAL attribute from intrinsics for TBP bindings (authored by klausler).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D131104/new/
https://reviews.llvm.org/D131104
Files:
flang/lib/Evaluate/characteristics.cpp
flang/lib/Evaluate/tools.cpp
flang/lib/Semantics/check-declarations.cpp
Index: flang/lib/Semantics/check-declarations.cpp
===================================================================
--- flang/lib/Semantics/check-declarations.cpp
+++ flang/lib/Semantics/check-declarations.cpp
@@ -1661,7 +1661,7 @@
return;
}
if (!IsElementalProcedure(binding.symbol()) &&
- IsElementalProcedure(overriddenBinding->symbol())) {
+ IsElementalProcedure(*overridden)) {
SayWithDeclaration(*overridden,
"A type-bound procedure and its override must both, or neither, be ELEMENTAL"_err_en_US);
return;
@@ -1674,7 +1674,7 @@
: "A passed-argument type-bound procedure may not override a NOPASS procedure"_err_en_US);
} else {
const auto *bindingChars{Characterize(binding.symbol())};
- const auto *overriddenChars{Characterize(overriddenBinding->symbol())};
+ const auto *overriddenChars{Characterize(*overridden)};
if (bindingChars && overriddenChars) {
if (isNopass) {
if (!bindingChars->CanOverride(*overriddenChars, std::nullopt)) {
Index: flang/lib/Evaluate/tools.cpp
===================================================================
--- flang/lib/Evaluate/tools.cpp
+++ flang/lib/Evaluate/tools.cpp
@@ -1247,7 +1247,8 @@
IsElementalProcedure(*procInterface);
}
} else if (const auto *details{symbol.detailsIf<ProcBindingDetails>()}) {
- return IsElementalProcedure(details->symbol());
+ return !details->symbol().attrs().test(Attr::INTRINSIC) &&
+ IsElementalProcedure(details->symbol());
} else if (!IsProcedure(symbol)) {
return false;
}
Index: flang/lib/Evaluate/characteristics.cpp
===================================================================
--- flang/lib/Evaluate/characteristics.cpp
+++ flang/lib/Evaluate/characteristics.cpp
@@ -530,15 +530,17 @@
[&](const semantics::ProcBindingDetails &binding) {
if (auto result{CharacterizeProcedure(
binding.symbol(), context, seenProcs)}) {
+ if (binding.symbol().attrs().test(semantics::Attr::INTRINSIC)) {
+ result->attrs.reset(Procedure::Attr::Elemental);
+ }
if (!symbol.attrs().test(semantics::Attr::NOPASS)) {
auto passName{binding.passName()};
for (auto &dummy : result->dummyArguments) {
if (!passName || dummy.name.c_str() == *passName) {
dummy.pass = true;
- return result;
+ break;
}
}
- DIE("PASS argument missing");
}
return result;
} else {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131104.451159.patch
Type: text/x-patch
Size: 2730 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220809/7306c314/attachment-0001.bin>
More information about the flang-commits
mailing list