diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp --- a/flang/lib/Semantics/expression.cpp +++ b/flang/lib/Semantics/expression.cpp @@ -1510,8 +1510,8 @@ return std::nullopt; } bool NeedLength() const { - return !explicitType_ && type_ && - type_->category() == TypeCategory::Character && !LengthIfGood(); + return type_ && type_->category() == TypeCategory::Character && + !LengthIfGood(); } void Push(MaybeExpr &&); void Add(const parser::AcValue::Triplet &); diff --git a/flang/test/Semantics/array-constr-len.f90 b/flang/test/Semantics/array-constr-len.f90 --- a/flang/test/Semantics/array-constr-len.f90 +++ b/flang/test/Semantics/array-constr-len.f90 @@ -10,5 +10,6 @@ print *, [(s(1:j),j=1,0)] print *, [(s(1:1),j=1,0)] ! ok print *, [character(2)::(s(1:n),j=1,0)] ! ok - print *, [character(n)::(s(1:n),j=1,0)] ! ok + !ERROR: Array constructor implied DO loop has no iterations and indeterminate character length + print *, [character(n)::(s(1:n),j=1,0)] end