diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-10-27 00:36:38 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-10-27 00:36:38 +0000 |
commit | ecccc1e286b56330c75b443a3a14b93e1d3bdedd (patch) | |
tree | f6fe3df8efd8ee6df1e9ccef40e78af56feead6d | |
parent | 7b82cfc1ba1ee7000273e81e1e4c791fff0e22e5 (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.cpp | 12 |
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; } } |