[flang-commits] [PATCH] D134440: [flang] Add TODOs for some FORALL assignments with Pointers and Allocatables
Jean Perier via Phabricator via flang-commits
flang-commits at lists.llvm.org
Thu Sep 22 07:13:08 PDT 2022
jeanPerier created this revision.
jeanPerier added reviewers: clementval, PeteSteinfeld.
jeanPerier added a project: Flang.
Herald added subscribers: mehdi_amini, jdoerfert.
Herald added a project: All.
jeanPerier requested review of this revision.
Add TODO for whole array allocatable assignment inside FORALL
Whole allocatable array assignment inside FORALL are otherwise currently
hitting more cryptic asserts.
Add TODO in FORALL assignment when a designator appear with a part ref
that is an allocatable or pointer component (a(i)%pointer%k). The lowering
code does not handle this case well because of the pointer dereference.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D134440
Files:
flang/lib/Lower/ConvertExpr.cpp
Index: flang/lib/Lower/ConvertExpr.cpp
===================================================================
--- flang/lib/Lower/ConvertExpr.cpp
+++ flang/lib/Lower/ConvertExpr.cpp
@@ -3856,6 +3856,9 @@
// FIXME: If the lhs is in an explicit iteration space, the assignment may
// be to an array of allocatable arrays rather than a single allocatable
// array.
+ if (explicitSpaceIsActive() && lhs.Rank() > 0)
+ TODO(loc, "assignment to whole allocatable array inside FORALL");
+
fir::MutableBoxValue mutableBox =
Fortran::lower::createMutableBox(loc, converter, lhs, symMap);
if (rhs.Rank() > 0)
@@ -7174,7 +7177,9 @@
if (components.hasExtendCoorRef()) {
auto eleBoxTy =
fir::applyPathToType(innerArg.getType(), iters.iterVec());
- assert(eleBoxTy && eleBoxTy.isa<fir::BoxType>());
+ if (!eleBoxTy || !eleBoxTy.isa<fir::BoxType>())
+ TODO(loc, "assignment in a FORALL involving a designator with a "
+ "POINTER or ALLOCATABLE component part-ref");
auto arrayOp = builder.create<fir::ArrayAccessOp>(
loc, builder.getRefType(eleBoxTy), innerArg, iters.iterVec(),
fir::factory::getTypeParams(loc, builder, load));
@@ -7245,7 +7250,9 @@
}
if (components.hasExtendCoorRef()) {
auto eleBoxTy = fir::applyPathToType(load.getType(), iters.iterVec());
- assert(eleBoxTy && eleBoxTy.isa<fir::BoxType>());
+ if (!eleBoxTy || !eleBoxTy.isa<fir::BoxType>())
+ TODO(loc, "assignment in a FORALL involving a designator with a "
+ "POINTER or ALLOCATABLE component part-ref");
auto access = builder.create<fir::ArrayAccessOp>(
loc, builder.getRefType(eleBoxTy), load, iters.iterVec(),
fir::factory::getTypeParams(loc, builder, load));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134440.462173.patch
Type: text/x-patch
Size: 1886 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220922/f9db2b36/attachment.bin>
More information about the flang-commits
mailing list