[flang] Accept SIZE(assumed-rank, DIM=n)
Silence a bogus error message about an out-of-range DIM= argument
when the argument is assumed-rank. (More generally, don't pretend
to be able to discern a shape of known rank for an assumed-rank
object.)
Differential Revision: https://reviews.llvm.org/D109915
GitOrigin-RevId: 12ba72789747b3e177349f04deb30afb410292c2
diff --git a/lib/Evaluate/shape.cpp b/lib/Evaluate/shape.cpp
index 7c5f517..8919038 100644
--- a/lib/Evaluate/shape.cpp
+++ b/lib/Evaluate/shape.cpp
@@ -500,6 +500,8 @@
[&](const semantics::ObjectEntityDetails &object) {
if (IsImpliedShape(symbol) && object.init()) {
return (*this)(object.init());
+ } else if (IsAssumedRank(symbol)) {
+ return Result{};
} else {
int n{object.shape().Rank()};
NamedEntity base{symbol};
@@ -517,12 +519,12 @@
}
},
[&](const semantics::AssocEntityDetails &assoc) {
- if (!assoc.rank()) {
- return (*this)(assoc.expr());
- } else {
+ if (assoc.rank()) { // SELECT RANK case
int n{assoc.rank().value()};
NamedEntity base{symbol};
return Result{CreateShape(n, base)};
+ } else {
+ return (*this)(assoc.expr());
}
},
[&](const semantics::SubprogramDetails &subp) {