forked from OSchip/llvm-project
[flang] Fix check for assumed-size arguments to SHAPE() & al.
The predicate that is used to detect an invalid assumed-size argument to the intrinsic functions SHAPE, SIZE, & LBOUND gives false results for arguments whose shapes are not calculatable at compilation time. Replace with an explicit test for an assumed-size array dummy argument symbol. Differential Revision: https://reviews.llvm.org/D125342
This commit is contained in:
parent
9873623425
commit
d80d812df0
flang/lib/Evaluate
|
@ -1563,8 +1563,8 @@ std::optional<SpecificCall> IntrinsicInterface::Match(
|
||||||
// (A previous error message for UBOUND will take precedence
|
// (A previous error message for UBOUND will take precedence
|
||||||
// over this one, as this error is caught by the second entry
|
// over this one, as this error is caught by the second entry
|
||||||
// for UBOUND.)
|
// for UBOUND.)
|
||||||
if (std::optional<Shape> shape{GetShape(context, *arg)}) {
|
if (const Symbol * argSym{GetLastSymbol(*arg)}) {
|
||||||
if (!shape->empty() && !shape->back().has_value()) {
|
if (semantics::IsAssumedSizeArray(*argSym)) {
|
||||||
if (strcmp(name, "shape") == 0) {
|
if (strcmp(name, "shape") == 0) {
|
||||||
messages.Say(arg->sourceLocation(),
|
messages.Say(arg->sourceLocation(),
|
||||||
"The '%s=' argument to the intrinsic function '%s' may not be assumed-size"_err_en_US,
|
"The '%s=' argument to the intrinsic function '%s' may not be assumed-size"_err_en_US,
|
||||||
|
|
Loading…
Reference in New Issue