[flang-commits] [flang] 6a63e21 - [flang] Fix rank and byte stride in pointer remapping
Valentin Clement via flang-commits
flang-commits at lists.llvm.org
Wed Feb 8 08:56:22 PST 2023
Author: Valentin Clement
Date: 2023-02-08T17:56:15+01:00
New Revision: 6a63e21cf4e6a8499d90e2337eb545644646ee31
URL: https://github.com/llvm/llvm-project/commit/6a63e21cf4e6a8499d90e2337eb545644646ee31
DIFF: https://github.com/llvm/llvm-project/commit/6a63e21cf4e6a8499d90e2337eb545644646ee31.diff
LOG: [flang] Fix rank and byte stride in pointer remapping
In some remapping case the rank of the pointer is different
from the target one.
```
program remap
type :: p
integer :: a
end type t
type(p), target :: ta(10) = [ (t(i),i=1,10) ]
class(t), pointer :: p(:,:)
p(1:2,1:5) => ta
end
```
This patch updates the rank and the byte stride to fix such case.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D143566
Added:
Modified:
flang/runtime/pointer.cpp
Removed:
################################################################################
diff --git a/flang/runtime/pointer.cpp b/flang/runtime/pointer.cpp
index c5ea96f3ee01a..7bfe7756597b2 100644
--- a/flang/runtime/pointer.cpp
+++ b/flang/runtime/pointer.cpp
@@ -102,6 +102,7 @@ void RTNAME(PointerAssociateRemapping)(Descriptor &pointer,
Terminator terminator{sourceFile, sourceLine};
SubscriptValue byteStride{/*captured from first dimension*/};
std::size_t boundElementBytes{bounds.ElementBytes()};
+ pointer.raw().rank = bounds.rank();
for (int j{0}; j < bounds.rank(); ++j) {
auto &dim{pointer.GetDimension(j)};
dim.SetBounds(GetInt64(bounds.ZeroBasedIndexedElement<const char>(2 * j),
@@ -109,7 +110,7 @@ void RTNAME(PointerAssociateRemapping)(Descriptor &pointer,
GetInt64(bounds.ZeroBasedIndexedElement<const char>(2 * j + 1),
boundElementBytes, terminator));
if (j == 0) {
- byteStride = dim.ByteStride();
+ byteStride = dim.ByteStride() * dim.Extent();
} else {
dim.SetByteStride(byteStride);
byteStride *= dim.Extent();
More information about the flang-commits
mailing list