aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Semantics/pointer-assignment.cpp
diff options
context:
space:
mode:
authorjeanPerier <jperier@nvidia.com>2024-06-24 10:21:04 +0200
committerGitHub <noreply@github.com>2024-06-24 10:21:04 +0200
commit73cf014223fed1947f725f7debcf19b8f54448b5 (patch)
tree95874478a5f4452ff5e99d83e6755326ec86a34d /flang/lib/Semantics/pointer-assignment.cpp
parent33676ba543737f8e286e28a9cae81a848bdd3f09 (diff)
downloadllvm-73cf014223fed1947f725f7debcf19b8f54448b5.zip
llvm-73cf014223fed1947f725f7debcf19b8f54448b5.tar.gz
llvm-73cf014223fed1947f725f7debcf19b8f54448b5.tar.bz2
[flang] harden TypeAndShape for assumed-ranks (#96234)
SIZEOF and C_SIZEOF were broken for assumed-ranks because `TypeAndShape::MeasureSizeInBytes` behaved as a scalar because the `TypeAndShape::shape_` member was the same for scalar and assumed-ranks. The easy fix would have been to add special handling in `MeasureSizeInBytes` for assumed-ranks using the TypeAndShape attributes, but I think this solution would leave `TypeAndShape::shape_` manipulation fragile to future developers. Hence, I went for the solution that turn shape_ into a `std::optional<Shape>`.
Diffstat (limited to 'flang/lib/Semantics/pointer-assignment.cpp')
-rw-r--r--flang/lib/Semantics/pointer-assignment.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/flang/lib/Semantics/pointer-assignment.cpp b/flang/lib/Semantics/pointer-assignment.cpp
index 0770720..a5c3897 100644
--- a/flang/lib/Semantics/pointer-assignment.cpp
+++ b/flang/lib/Semantics/pointer-assignment.cpp
@@ -333,8 +333,8 @@ bool PointerAssignmentChecker::Check(const evaluate::Designator<T> &d) {
} else if (!isBoundsRemapping_ &&
!lhsType_->attrs().test(TypeAndShape::Attr::AssumedRank)) {
- int lhsRank{evaluate::GetRank(lhsType_->shape())};
- int rhsRank{evaluate::GetRank(rhsType->shape())};
+ int lhsRank{lhsType_->Rank()};
+ int rhsRank{rhsType->Rank()};
if (lhsRank != rhsRank) {
msg = MessageFormattedText{
"Pointer has rank %d but target has rank %d"_err_en_US, lhsRank,