aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaDecl.cpp9
-rw-r--r--test/SemaObjC/class-bitfield.m17
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
+