Index: clang/include/clang/AST/APValue.h =================================================================== --- clang/include/clang/AST/APValue.h +++ clang/include/clang/AST/APValue.h @@ -508,6 +508,8 @@ return const_cast(this)->getArrayInitializedElt(I); } bool hasArrayFiller() const { + if (!isArray()) + return false; return getArrayInitializedElts() != getArraySize(); } APValue &getArrayFiller() { Index: clang/test/SemaCXX/constexpr-array-init.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/constexpr-array-init.cpp @@ -0,0 +1,19 @@ + +// RUN: %clang_cc1 -std=c++20 -verify %s + +struct Foo { + int a; // expected-note {{subobject declared here}} + constexpr Foo() + : a(get_int()) { + } + + constexpr int get_int() { + return 5; + } +}; + + +static constexpr Foo bar[2][1] = { // expected-error {{constexpr variable 'bar' must be initialized by a constant expression}} \ + // expected-note {{subobject of type 'int' is not initialized}} + {{}}, +};