]> granicus.if.org Git - clang/commitdiff
Fix <rdar://problem/6586239> bitfield constraints not enforced (for ObjC)
authorSteve Naroff <snaroff@apple.com>
Fri, 20 Feb 2009 17:57:11 +0000 (17:57 +0000)
committerSteve Naroff <snaroff@apple.com>
Fri, 20 Feb 2009 17:57:11 +0000 (17:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65128 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/SemaObjC/class-bitfield.m [new file with mode: 0644]

index 5a18aeb0accaa0c6e8506ee91885e2b612fc6df4..08b5a8c2ab1d9368d91257c5a2ceb45f30e85d48 100644 (file)
@@ -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 (file)
index 0000000..713a898
--- /dev/null
@@ -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
+