From: Rafael Espindola Date: Sat, 27 Oct 2012 00:36:38 +0000 (+0000) Subject: Delay codegen to after collecting all SubobjectAdjustment so that the collection X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ecccc1e286b56330c75b443a3a14b93e1d3bdedd;p=clang 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 --- 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(); - 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; } }