[cfe-commits] r76978 - in /cfe/trunk: lib/CodeGen/CGObjCMac.cpp test/CodeGenObjC/ivar-layout-64-bitfields.m

Anders Carlsson andersca at mac.com
Fri Jul 24 10:23:55 PDT 2009


Author: andersca
Date: Fri Jul 24 12:23:54 2009
New Revision: 76978

URL: http://llvm.org/viewvc/llvm-project?rev=76978&view=rev
Log:
Don't use getLLVMFieldNo for bitfields when constructing the ivar layout maps for GC.

Added:
    cfe/trunk/test/CodeGenObjC/ivar-layout-64-bitfields.m
Modified:
    cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=76978&r1=76977&r2=76978&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Fri Jul 24 12:23:54 2009
@@ -3042,10 +3042,14 @@
   for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
     FieldDecl *Field = RecFields[i];
     uint64_t FieldOffset;
-    if (RD)
-      FieldOffset = 
-        Layout->getElementOffset(CGM.getTypes().getLLVMFieldNo(Field));
-    else
+    if (RD) {
+      if (Field->isBitField()) {
+        CodeGenTypes::BitFieldInfo Info = CGM.getTypes().getBitFieldInfo(Field);
+        FieldOffset = Layout->getElementOffset(Info.FieldNo);
+      } else 
+        FieldOffset = 
+          Layout->getElementOffset(CGM.getTypes().getLLVMFieldNo(Field));
+    } else
       FieldOffset = ComputeIvarBaseOffset(CGM, OI, cast<ObjCIvarDecl>(Field));
 
     // Skip over unnamed or bitfields

Added: cfe/trunk/test/CodeGenObjC/ivar-layout-64-bitfields.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/ivar-layout-64-bitfields.m?rev=76978&view=auto

==============================================================================
--- cfe/trunk/test/CodeGenObjC/ivar-layout-64-bitfields.m (added)
+++ cfe/trunk/test/CodeGenObjC/ivar-layout-64-bitfields.m Fri Jul 24 12:23:54 2009
@@ -0,0 +1,12 @@
+// RUN: clang-cc -triple x86_64-apple-darwin9 -fobjc-gc -emit-llvm -o %t %s
+ at interface I
+{
+  struct {
+    unsigned int d : 1;
+  } bitfield;
+}
+ at end
+
+ at implementation I
+ at end
+





More information about the cfe-commits mailing list