]> granicus.if.org Git - clang/commitdiff
Add assert to detect incomplete implementation work.
authorDevang Patel <dpatel@apple.com>
Thu, 13 Dec 2007 01:24:16 +0000 (01:24 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 13 Dec 2007 01:24:16 +0000 (01:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44974 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CodeGenTypes.cpp

index a66c760340d258dd234792468f7c8ca6305405d4..54cc8b123649730cc5a0812d9e08aa9a2e0d03b7 100644 (file)
@@ -594,6 +594,11 @@ void RecordOrganizer::placeBitField(const FieldDecl *FD) {
       }
     }
   } else  if (ExtraBits >= BitFieldSize) {
+    const llvm::Type *Ty = CGT.ConvertType(FD->getType());
+    uint64_t TySize = CGT.getTargetData().getABITypeSizeInBits(Ty);
+    assert ( Cursor - CurrentFieldStart + BitFieldSize <= TySize
+             && "Incomplete layout. struct {char a; int b:10; int c:18;};");
+
     // Reuse existing llvm field
     ExtraBits = ExtraBits  - BitFieldSize;
     CGT.addFieldInfo(FD, FieldNo, Cursor - CurrentFieldStart, ExtraBits);
@@ -604,13 +609,13 @@ void RecordOrganizer::placeBitField(const FieldDecl *FD) {
     const llvm::Type *Ty = CGT.ConvertType(FD->getType());
     const llvm::Type *PrevTy = LLVMFields.back();
     uint64_t TySize = CGT.getTargetData().getABITypeSizeInBits(Ty);
-    if (CGT.getTargetData().getABITypeSizeInBits(PrevTy) >= TySize) {
-      // Previous field does not allow sharing of ExtraBits. Use new field.
-      // struct { char a; char b:5; char c:4; } where c is current FD.
-      Cursor += ExtraBits;
-      ExtraBits = 0;
-      addLLVMField(Ty, TySize, FD, 0, BitFieldSize);
-    } else
-      assert (!FD->isBitField() && "Bit fields are not yet supported");
+    assert (CGT.getTargetData().getABITypeSizeInBits(PrevTy) >= TySize
+            && "Unable to handle bit field");
+
+    // Previous field does not allow sharing of ExtraBits. Use new field.
+    // struct { char a; char b:5; char c:4; } where c is current FD.
+    Cursor += ExtraBits;
+    ExtraBits = 0;
+    addLLVMField(Ty, TySize, FD, 0, BitFieldSize);
   }
 }