From: David Majnemer Date: Sun, 26 Apr 2015 04:58:18 +0000 (+0000) Subject: [Sema] Don't allow unverified bitfields in FieldDecls X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3ca1dc1fb5675c69b1f80e64f6b6ab871eff7dad;p=clang [Sema] Don't allow unverified bitfields in FieldDecls VerifyBitField must be called if we are to form a bitfield FieldDecl. We will not verify the bitfield if the decl is known to be malformed in other ways; pretend that we don't have a bitfield if this happens. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235816 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 339280614f..07dbdaf996 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -12481,8 +12481,10 @@ FieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, InvalidDecl = true; bool ZeroWidth = false; + if (InvalidDecl) + BitWidth = nullptr; // If this is declared as a bit-field, check the bit-field. - if (!InvalidDecl && BitWidth) { + if (BitWidth) { BitWidth = VerifyBitField(Loc, II, T, Record->isMsStruct(Context), BitWidth, &ZeroWidth).get(); if (!BitWidth) { diff --git a/test/Sema/bitfield.c b/test/Sema/bitfield.c index fb72213475..f214b671f6 100644 --- a/test/Sema/bitfield.c +++ b/test/Sema/bitfield.c @@ -74,3 +74,7 @@ typedef __typeof__(+(--t5.n)) Signed; // This should not promote to signed. typedef __typeof__(+(t5.n++)) Unsigned; // Post-increment is underspecified, but seems to typedef __typeof__(+(t5.n--)) Unsigned; // also act like compound-assignment. + +struct Test6 { + : 0.0; // expected-error{{type name requires a specifier or qualifier}} +};