[flang-commits] [flang] 62b127e - [flang] Fix IsConstantExpr for division expressions
Jean Perier via flang-commits
flang-commits at lists.llvm.org
Thu Jun 4 00:44:51 PDT 2020
Author: Jean Perier
Date: 2020-06-04T09:44:44+02:00
New Revision: 62b127eef6b37a57a647050b0e123f6ac928215f
URL: https://github.com/llvm/llvm-project/commit/62b127eef6b37a57a647050b0e123f6ac928215f
DIFF: https://github.com/llvm/llvm-project/commit/62b127eef6b37a57a647050b0e123f6ac928215f.diff
LOG: [flang] Fix IsConstantExpr for division expressions
Summary:
Fortran::evaluate::IsConstantExpr did not check that the numerator
was a constant expression. This patch fixes the issue.
Reviewers: DavidTruby, klausler, schweitz, PeteSteinfeld, jdoerfert, sscalpone
Reviewed By: klausler, PeteSteinfeld, sscalpone
Subscribers: llvm-commits
Tags: #llvm, #flang
Differential Revision: https://reviews.llvm.org/D81096
Added:
Modified:
flang/lib/Evaluate/check-expression.cpp
flang/test/Semantics/resolve37.f90
Removed:
################################################################################
diff --git a/flang/lib/Evaluate/check-expression.cpp b/flang/lib/Evaluate/check-expression.cpp
index a252a964e9e5..b6c3b20b2ec4 100644
--- a/flang/lib/Evaluate/check-expression.cpp
+++ b/flang/lib/Evaluate/check-expression.cpp
@@ -68,7 +68,7 @@ class IsConstantExprHelper : public AllTraverse<IsConstantExprHelper, true> {
const Divide<Type<TypeCategory::Integer, KIND>> &division) const {
using T = Type<TypeCategory::Integer, KIND>;
if (const auto divisor{GetScalarConstantValue<T>(division.right())}) {
- return !divisor->IsZero();
+ return !divisor->IsZero() && (*this)(division.left());
} else {
return false;
}
diff --git a/flang/test/Semantics/resolve37.f90 b/flang/test/Semantics/resolve37.f90
index 7b5a488462ff..0e9d20be3a61 100644
--- a/flang/test/Semantics/resolve37.f90
+++ b/flang/test/Semantics/resolve37.f90
@@ -29,6 +29,11 @@
integer, parameter :: p = 0/0
!ERROR: Must be a constant value
integer, parameter :: q = 1+2*(1/0)
+integer not_constant
+!ERROR: Must be a constant value
+integer, parameter :: s1 = not_constant/2
+!ERROR: Must be a constant value
+integer, parameter :: s2 = 3/not_constant
!ERROR: Must be a constant value
integer(kind=2/0) r
integer, parameter :: sok(*)=[1,2]/[1,2]
More information about the flang-commits
mailing list