[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