[flang-commits] [PATCH] D153799: [flang] Handle empty array references in DATA statements
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Tue Jun 27 13:29:49 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rG59f0959ba4ef: [flang] Handle empty array references in DATA statements (authored by klausler).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D153799/new/
https://reviews.llvm.org/D153799
Files:
flang/lib/Evaluate/fold-designator.cpp
flang/test/Semantics/data05.f90
Index: flang/test/Semantics/data05.f90
===================================================================
--- flang/test/Semantics/data05.f90
+++ flang/test/Semantics/data05.f90
@@ -89,4 +89,8 @@
procedure(rfunc), pointer :: pp ! CHECK: pp, EXTERNAL, POINTER (Function, InDataStmt) size=8 offset=0: ProcEntity rfunc => rfunc2
data pp/rfunc2/
end subroutine
+ subroutine s13
+ integer j(2)
+ data j(2:1), j(1:2) /1,2/ ! CHECK: j (InDataStmt) size=8 offset=0: ObjectEntity type: INTEGER(4) shape: 1_8:2_8 init:[INTEGER(4)::1_4,2_4]
+ end subroutine
end module
Index: flang/lib/Evaluate/fold-designator.cpp
===================================================================
--- flang/lib/Evaluate/fold-designator.cpp
+++ flang/lib/Evaluate/fold-designator.cpp
@@ -90,6 +90,8 @@
result->Augment((at - lower) * stride);
which = quotient;
return true;
+ } else {
+ isEmpty_ = true;
}
}
return false;
@@ -100,16 +102,20 @@
auto end{ToInt64(Fold(context_,
triplet.upper().value_or(ExtentExpr{upper})))};
auto step{ToInt64(Fold(context_, triplet.stride()))};
- if (start && end && step && *step != 0) {
- ConstantSubscript range{
- (*end - *start + *step) / *step};
- if (range > 0) {
- auto quotient{which / range};
- auto remainder{which - range * quotient};
- auto j{*start + remainder * *step};
- result->Augment((j - lower) * stride);
- which = quotient;
- return true;
+ if (start && end && step) {
+ if (*step != 0) {
+ ConstantSubscript range{
+ (*end - *start + *step) / *step};
+ if (range > 0) {
+ auto quotient{which / range};
+ auto remainder{which - range * quotient};
+ auto j{*start + remainder * *step};
+ result->Augment((j - lower) * stride);
+ which = quotient;
+ return true;
+ } else {
+ isEmpty_ = true;
+ }
}
}
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D153799.535113.patch
Type: text/x-patch
Size: 2866 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230627/637b5ce0/attachment-0001.bin>
More information about the flang-commits
mailing list