Index: lib/Sema/SemaInit.cpp =================================================================== --- lib/Sema/SemaInit.cpp +++ lib/Sema/SemaInit.cpp @@ -2247,6 +2247,9 @@ ++FieldIndex; } + if (auto *CXXRD = dyn_cast(RT->getDecl())) + FieldIndex += CXXRD->getNumBases(); + RecordDecl::field_iterator Field = RecordDecl::field_iterator(DeclContext::decl_iterator(KnownField)); Index: test/SemaCXX/designated-initializers-base-class.cpp =================================================================== --- /dev/null +++ test/SemaCXX/designated-initializers-base-class.cpp @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 %s -std=c++1z -ast-dump | FileCheck %s + +// CHECK: VarDecl {{.*}} d 'struct D' cinit +// CHECK: InitListExpr {{.*}} 'struct D' +// CHECK: InitListExpr {{.*}} 'struct B' +// CHECK: ImplicitValueInitExpr {{.*}} 'int' +// CHECK: IntegerLiteral {{.*}} 'int' 1 + +struct B { + int x; +}; + +struct D : B { + int y; +}; + +void test() { + D d = { .y = 1 }; +}