aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-10-27 00:36:38 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-10-27 00:36:38 +0000
commitecccc1e286b56330c75b443a3a14b93e1d3bdedd (patch)
treef6fe3df8efd8ee6df1e9ccef40e78af56feead6d
parent7b82cfc1ba1ee7000273e81e1e4c791fff0e22e5 (diff)
Delay codegen to after collecting all SubobjectAdjustment so that the collection
can be refactored and used in Sema. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166847 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/CGExpr.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 21df6e8cfa..a9777478d2 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -177,7 +177,7 @@ namespace {
struct {
const MemberPointerType *MPT;
- llvm::Value *Ptr;
+ Expr *RHS;
} Ptr;
};
@@ -193,10 +193,10 @@ namespace {
this->Field = Field;
}
- SubobjectAdjustment(const MemberPointerType *MPT, llvm::Value *Ptr)
+ SubobjectAdjustment(const MemberPointerType *MPT, Expr *RHS)
: Kind(MemberPointerAdjustment) {
this->Ptr.MPT = MPT;
- this->Ptr.Ptr = Ptr;
+ this->Ptr.RHS = RHS;
}
};
}
@@ -371,8 +371,7 @@ EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
E = BO->getLHS();
const MemberPointerType *MPT =
BO->getRHS()->getType()->getAs<MemberPointerType>();
- llvm::Value *Ptr = CGF.EmitScalarExpr(BO->getRHS());
- Adjustments.push_back(SubobjectAdjustment(MPT, Ptr));
+ Adjustments.push_back(SubobjectAdjustment(MPT, BO->getRHS()));
}
}
@@ -447,8 +446,9 @@ EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
}
case SubobjectAdjustment::MemberPointerAdjustment: {
+ llvm::Value *Ptr = CGF.EmitScalarExpr(Adjustment.Ptr.RHS);
Object = CGF.CGM.getCXXABI().EmitMemberDataPointerAddress(
- CGF, Object, Adjustment.Ptr.Ptr, Adjustment.Ptr.MPT);
+ CGF, Object, Ptr, Adjustment.Ptr.MPT);
break;
}
}