diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 2f2f7c1fe55fe3ab8d83016825816bbc8f0e6c82..29c76887a7c94fd54e174a1272ac2232d0a2945e 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -394,7 +394,7 @@ void AggExprEmitter::VisitBinAssign(const BinaryOperator *E) { && "Invalid assignment"); if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E->getLHS())) - if (const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl())) { + if (const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl())) if (VD->hasAttr<BlocksAttr>() && E->getRHS()->HasSideEffects(CGF.getContext())) { // When __block variable on LHS, the RHS must be evaluated first @@ -404,12 +404,10 @@ void AggExprEmitter::VisitBinAssign(const BinaryOperator *E) { bool GCollection = false; if (CGF.getContext().getLangOptions().getGCMode()) GCollection = TypeRequiresGCollection(E->getLHS()->getType()); - // Codegen the RHS so that it stores directly into the LHS. Dest = AggValueSlot::forLValue(LHS, true, GCollection); EmitFinalDestCopy(E, RHS, true); return; } - } LValue LHS = CGF.EmitLValue(E->getLHS());