Don't use getLLVMFieldNo for bitfields when constructing the ivar layout maps for GC.

llvm-svn: 76978
This commit is contained in:
Anders Carlsson 2009-07-24 17:23:54 +00:00
parent b68b506d84
commit e2c6baf629
2 changed files with 20 additions and 4 deletions

View File

@ -3042,10 +3042,14 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI,
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

View File

@ -0,0 +1,12 @@
// RUN: clang-cc -triple x86_64-apple-darwin9 -fobjc-gc -emit-llvm -o %t %s
@interface I
{
struct {
unsigned int d : 1;
} bitfield;
}
@end
@implementation I
@end