diff --git a/flang/lib/Evaluate/check-expression.cpp b/flang/lib/Evaluate/check-expression.cpp --- a/flang/lib/Evaluate/check-expression.cpp +++ b/flang/lib/Evaluate/check-expression.cpp @@ -68,7 +68,7 @@ const Divide> &division) const { using T = Type; if (const auto divisor{GetScalarConstantValue(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 --- 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]