diff options
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 9 | ||||
-rw-r--r-- | test/SemaObjC/class-bitfield.m | 17 |
2 files changed, 20 insertions, 6 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 5a18aeb0ac..08b5a8c2ab 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -3572,12 +3572,9 @@ Sema::DeclTy *Sema::ActOnIvar(Scope *S, bool InvalidDecl = false; if (BitWidth) { - // TODO: Validate. - //printf("WARNING: BITFIELDS IGNORED!\n"); - - // 6.7.2.1p3 - // 6.7.2.1p4 - + // 6.7.2.1p3, 6.7.2.1p4 + if (VerifyBitField(Loc, II, T, BitWidth)) + InvalidDecl = true; } else { // Not a bitfield. diff --git a/test/SemaObjC/class-bitfield.m b/test/SemaObjC/class-bitfield.m new file mode 100644 index 0000000000..713a898fa0 --- /dev/null +++ b/test/SemaObjC/class-bitfield.m @@ -0,0 +1,17 @@ +// RUN: clang %s -fsyntax-only -verify + +@interface X +{ + int a : -1; // expected-error{{bit-field 'a' has negative width}} + + // rdar://6081627 + int b : 33; // expected-error{{size of bit-field 'b' exceeds size of its type (32 bits)}} + + int c : (1 + 0.25); // expected-error{{expression is not an integer constant expression}} + int d : (int)(1 + 0.25); + + // rdar://6138816 + int e : 0; // expected-error {{bit-field 'e' has zero width}} +} +@end + |