From: Eli Friedman Date: Sat, 9 Aug 2008 23:45:45 +0000 (+0000) Subject: Make sure to count the struct elements correctly; here, we want the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1bb516c8615714317c72ec8065cc3177714d336e;p=clang Make sure to count the struct elements correctly; here, we want the member count. The count returned by numStructUnionElements is the number of initializers that will be consumed, not the number of members to iterate through. Fixes PR2534. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54601 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 1889bafacb..bc38de3633 100644 --- a/lib/Sema/SemaInit.cpp +++ b/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/test/Sema/unnamed-bitfield-init.c b/test/Sema/unnamed-bitfield-init.c new file mode 100644 index 0000000000..3a3869ab6d --- /dev/null +++ b/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 };