]> granicus.if.org Git - clang/commitdiff
Fix for codegen crash on multibit bool bitfield initialization
authorDaniel Dunbar <daniel@zuster.org>
Thu, 17 Jul 2008 21:07:48 +0000 (21:07 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 17 Jul 2008 21:07:48 +0000 (21:07 +0000)
<rdar://problem/6078606>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53737 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprConstant.cpp

index fe11a5fb0ac9eed6a9b4ddb8825eecabcc5b1faa..813bcfb8554acc7d22c173d73d3185a11cbae685 100644 (file)
@@ -145,6 +145,13 @@ public:
     while (offset < (fieldOffset & -8))
       offset += CGM.getTypes().getTargetData().getTypeStoreSizeInBits(Elts[i++]->getType());
 
+    // Promote the size of V if necessary
+    // FIXME: This should never occur, but currently it can because
+    // initializer constants are cast to bool, and because clang is
+    // not enforcing bitfield width limits.
+    if (bitFieldInfo.Size > V.getBitWidth())
+      V.zext(bitFieldInfo.Size);
+
     // Insert the bits into the struct
     // FIXME: This algorthm is only correct on X86!
     // FIXME: THis algorthm assumes bit-fields only have byte-size elements!