summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-02-03 19:03:09 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-02-03 19:03:09 +0000
commit712bfa64788fcb98e3bce3beaa3203a451a498fe (patch)
tree5060262e16da9fad3a55e6aeb24378ee3acc54f9 /clang/lib/CodeGen/CGExpr.cpp
parentd564353193c9c304daefbf95fcdd1d85df421d0d (diff)
downloadbcm5719-llvm-712bfa64788fcb98e3bce3beaa3203a451a498fe.tar.gz
bcm5719-llvm-712bfa64788fcb98e3bce3beaa3203a451a498fe.zip
ir-gen for nonfragile ivar bitfield access (objc2 nonfragile abi).
llvm-svn: 63644
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 4f8bd46b524..f085127da2a 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -850,8 +850,8 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) {
LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value* BaseValue,
FieldDecl* Field,
- unsigned CVRQualifiers,
- unsigned idx) {
+ unsigned CVRQualifiers) {
+ unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
// FIXME: CodeGenTypes should expose a method to get the appropriate
// type for FieldTy (the appropriate type is ABI-dependent).
const llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(Field->getType());
@@ -877,11 +877,10 @@ LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue,
bool isUnion,
unsigned CVRQualifiers)
{
- unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
-
if (Field->isBitField())
- return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers, idx);
+ return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers);
+ unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
// Match union field type.
@@ -1028,19 +1027,12 @@ LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
// See comment in EmitIvarOffset.
if (CGM.getObjCRuntime().LateBoundIVars())
assert(0 && "late-bound ivars are unsupported");
- // TODO: Add a special case for isa (index 0)
- unsigned Index = CGM.getTypes().getLLVMFieldNo(Field);
- if (Ivar->isBitField()) {
- return EmitLValueForBitfield(BaseValue, const_cast<FieldDecl *>(Field),
- CVRQualifiers, Index);
- }
- llvm::Value *V = CGM.getObjCRuntime().EmitObjCValueForIvar(*this,
- ObjectTy,
- BaseValue, Ivar, Field, CVRQualifiers);
- LValue LV = LValue::MakeAddr(V, Ivar->getType().getCVRQualifiers()|CVRQualifiers);
+ LValue LV = CGM.getObjCRuntime().EmitObjCValueForIvar(*this,
+ ObjectTy,
+ BaseValue, Ivar, Field,
+ CVRQualifiers);
SetVarDeclObjCAttribute(getContext(), Ivar, Ivar->getType(), LV);
- LValue::SetObjCIvar(LV, true);
return LV;
}
OpenPOWER on IntegriCloud