diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp index 777ef3b20b232..0f07fe0b202c6 100644 --- a/flang/lib/Semantics/expression.cpp +++ b/flang/lib/Semantics/expression.cpp @@ -1600,6 +1600,14 @@ void ArrayConstructorContext::Push(MaybeExpr &&x) { messageDisplayedSet_ |= 8; } return; + } else if (dyType->category() == TypeCategory::Derived && + dyType->GetDerivedTypeSpec().typeSymbol().attrs().test( + semantics::Attr::ABSTRACT)) { // F'2023 C7125 + if (!(messageDisplayedSet_ & 0x200)) { + exprAnalyzer_.Say( + "An item whose declared type is ABSTRACT may not appear in an array constructor"_err_en_US); + messageDisplayedSet_ |= 0x200; + } } DynamicTypeWithLength xType{dyType.value()}; if (Expr * charExpr{UnwrapExpr>(*x)}) { diff --git a/flang/test/Semantics/array-constr-values.f90 b/flang/test/Semantics/array-constr-values.f90 index 860a3a3d98b32..b93f774e0b0d0 100644 --- a/flang/test/Semantics/array-constr-values.f90 +++ b/flang/test/Semantics/array-constr-values.f90 @@ -44,9 +44,10 @@ subroutine arrayconstructorvalues() !ERROR: Cannot have an unlimited polymorphic value in an array constructor intarray = (/ unlim_polymorphic, 2, 3, 4, 5/) - ! C7114 + ! C7114, F'2023 C7125 !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches operand types INTEGER(4) and TYPE(base_type) !ERROR: ABSTRACT derived type 'base_type' may not be used in a structure constructor + !ERROR: An item whose declared type is ABSTRACT may not appear in an array constructor !ERROR: Values in array constructor must have the same declared type when no explicit type appears intarray = (/ base_type(10), 2, 3, 4, 5 /)