aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-17 17:46:19 +0000
committerChris Lattner <sabre@nondot.org>2009-04-17 17:46:19 +0000
commit51123fe78c92a4d1e76b6599db9db6a87db7b679 (patch)
tree28cbdaed91643e72c95e9155df9325f34eba957f /lib/CodeGen/CGObjCMac.cpp
parent26f074b249b7b113c78fad22e80b0e03289aa7d2 (diff)
Fix rdar://6800926 - crash compiling non-fragile _Bool bitfield ivar,
the functional change here is changing ConvertType -> ConvertTypeForMem so that we handle i1 fields properly as memory. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69361 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 67fc63c65a..4acc618103 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -4868,23 +4868,23 @@ LValue CGObjCNonFragileABIMac::EmitObjCValueForIvar(
ObjCIvarOffsetVariable(ExternalName, ID, Ivar);
// (char *) BaseValue
- llvm::Value *V = CGF.Builder.CreateBitCast(BaseValue,
- ObjCTypes.Int8PtrTy);
+ llvm::Value *V = CGF.Builder.CreateBitCast(BaseValue, ObjCTypes.Int8PtrTy);
llvm::Value *Offset = CGF.Builder.CreateLoad(IvarOffsetGV);
// (char*)BaseValue + Offset_symbol
V = CGF.Builder.CreateGEP(V, Offset, "add.ptr");
// (type *)((char*)BaseValue + Offset_symbol)
const llvm::Type *IvarTy =
- CGM.getTypes().ConvertType(Ivar->getType());
+ CGM.getTypes().ConvertTypeForMem(Ivar->getType());
llvm::Type *ptrIvarTy = llvm::PointerType::getUnqual(IvarTy);
V = CGF.Builder.CreateBitCast(V, ptrIvarTy);
if (Ivar->isBitField()) {
+ QualType FieldTy = Field->getType();
CodeGenTypes::BitFieldInfo bitFieldInfo =
CGM.getTypes().getBitFieldInfo(Field);
return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size,
- Field->getType()->isSignedIntegerType(),
- Field->getType().getCVRQualifiers()|CVRQualifiers);
+ FieldTy->isSignedIntegerType(),
+ FieldTy.getCVRQualifiers()|CVRQualifiers);
}
LValue LV = LValue::MakeAddr(V,