[flang-commits] [PATCH] D123237: [flang] Fix LBOUND() folding for constant arrays
Mike K via Phabricator via flang-commits
flang-commits at lists.llvm.org
Mon Apr 18 06:42:34 PDT 2022
FruitClover updated this revision to Diff 423369.
FruitClover added a comment.
Apply review changes, update tests
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D123237/new/
https://reviews.llvm.org/D123237
Files:
flang/lib/Evaluate/fold-integer.cpp
flang/test/Evaluate/folding08.f90
flang/test/Evaluate/folding16.f90
Index: flang/test/Evaluate/folding16.f90
===================================================================
--- flang/test/Evaluate/folding16.f90
+++ flang/test/Evaluate/folding16.f90
@@ -7,7 +7,7 @@
integer, parameter :: c(-1:1) = [33, 22, 11]
integer, parameter :: d(1:3) = [33, 22, 11]
integer, parameter :: e(-2:0) = ([33, 22, 11])
- logical, parameter :: test_1 = lbound((a),1)==-1 .and. lbound(b,1)==-1 .and. &
+ logical, parameter :: test_1 = lbound((a),1)==1 .and. lbound(b,1)==-1 .and. &
lbound(log(a),1)==1 .and. all(b==0)
logical, parameter :: test_2 = all(c .eq. d)
logical, parameter :: test_3 = all(c .eq. e)
Index: flang/test/Evaluate/folding08.f90
===================================================================
--- flang/test/Evaluate/folding08.f90
+++ flang/test/Evaluate/folding08.f90
@@ -95,4 +95,33 @@
lbound(a3, 2) == 1 .and. &
lbound(a3, 3) == 4
end subroutine
+ subroutine test4_lbound_parentheses
+ ! Test lbound with (x) expressions
+ integer :: a1(1) = 0
+ logical, parameter :: test_lba1 = all(lbound((a1)) == [1])
+ integer :: a2(0:2) = 0
+ logical, parameter :: test_lba2 = all(lbound((a2)) == [1])
+ integer :: a3(-1:0) = 0
+ logical, parameter :: test_lba3 = all(lbound((a3)) == [1])
+ integer :: a4(-5:-1, 2:5) = 0
+ logical, parameter :: test_lba4 = all(lbound((a4)) == [1, 1])
+
+ ! Exercise with DIM=
+ logical, parameter :: test_lba4_dim = lbound((a4), 1) == 1 .and. &
+ lbound((a4), 2) == 1
+
+ ! Exercise with parameter types
+ integer, parameter :: pa1(1) = 0
+ logical, parameter :: test_lbpa1 = all(lbound((pa1)) == [1])
+ integer, parameter :: pa2(0:2) = 0
+ logical, parameter :: test_lbpa2 = all(lbound((pa2)) == [1])
+ integer, parameter :: pa3(-1:0) = 0
+ logical, parameter :: test_lbpa3 = all(lbound((pa3)) == [1])
+ integer, parameter :: pa4(-5:-1, 2:5) = 0
+ logical, parameter :: test_lbpa4 = all(lbound((pa4)) == [1, 1])
+
+ ! Exercise with DIM=
+ logical, parameter :: test_lbpa4_dim = lbound((pa4), 1) == 1 .and. &
+ lbound((pa4), 2) == 1
+ end
end
Index: flang/lib/Evaluate/fold-integer.cpp
===================================================================
--- flang/lib/Evaluate/fold-integer.cpp
+++ flang/lib/Evaluate/fold-integer.cpp
@@ -53,8 +53,9 @@
}
template <typename T> ConstantSubscripts GetLbound(const Parentheses<T> &x) {
- // Strip off the parentheses
- return GetLbound(x.left());
+ // LBOUND for (x) is [1, ..., 1] cause of temp variable inside
+ // parentheses (lower bound is omitted, the default value is 1).
+ return ConstantSubscripts(x.Rank(), ConstantSubscript{1});
}
template <typename T> ConstantSubscripts GetLbound(const Expr<T> &x) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123237.423369.patch
Type: text/x-patch
Size: 2813 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220418/24bc5e70/attachment.bin>
More information about the flang-commits
mailing list