diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 1889bafacb08..bc38de3633a6 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -286,7 +286,8 @@ void InitListChecker::CheckStructUnionTypes(InitListExpr *IList, // If structDecl is a forward declaration, this loop won't do anything; // That's okay, because an error should get printed out elsewhere. It // might be worthwhile to skip over the rest of the initializer, though. - int numMembers = numStructUnionElements(DeclType); + int numMembers = DeclType->getAsRecordType()->getDecl()->getNumMembers() - + structDecl->hasFlexibleArrayMember(); for (int i = 0; i < numMembers; i++) { // Don't attempt to go past the end of the init list if (Index >= IList->getNumInits()) diff --git a/clang/test/Sema/unnamed-bitfield-init.c b/clang/test/Sema/unnamed-bitfield-init.c new file mode 100644 index 000000000000..3a3869ab6dfb --- /dev/null +++ b/clang/test/Sema/unnamed-bitfield-init.c @@ -0,0 +1,6 @@ +// RUN: clang -fsyntax-only -verify %s +typedef struct { + int a; int : 24; char b; +} S; + +S a = { 1, 2 };