Index: cfe/trunk/lib/Sema/SemaInit.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaInit.cpp +++ cfe/trunk/lib/Sema/SemaInit.cpp @@ -2237,6 +2237,10 @@ } unsigned FieldIndex = 0; + + if (auto *CXXRD = dyn_cast(RT->getDecl())) + FieldIndex = CXXRD->getNumBases(); + for (auto *FI : RT->getDecl()->fields()) { if (FI->isUnnamedBitfield()) continue; Index: cfe/trunk/test/SemaCXX/designated-initializers-base-class.cpp =================================================================== --- cfe/trunk/test/SemaCXX/designated-initializers-base-class.cpp +++ cfe/trunk/test/SemaCXX/designated-initializers-base-class.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 %s -std=c++1z -fsyntax-only -verify -Winitializer-overrides +// expected-no-diagnostics + +struct B { + int x; +}; + +struct D : B { + int y; +}; + +void test() { D d = {1, .y = 2}; }