On Mon, Aug 25, 2014 at 7:28 PM, Richard Trieu <[email protected]> wrote:
> > > > On Mon, Aug 25, 2014 at 2:58 PM, Alexey Samsonov <[email protected]> > wrote: > >> Author: samsonov >> Date: Mon Aug 25 16:58:56 2014 >> New Revision: 216410 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=216410&view=rev >> Log: >> Pass actual CXXConstructExpr instead of argument iterators >> into EmitSynthesizedCXXCopyCtorCall. No functionality change. >> >> Modified: >> cfe/trunk/lib/CodeGen/CGClass.cpp >> cfe/trunk/lib/CodeGen/CGExprCXX.cpp >> cfe/trunk/lib/CodeGen/CodeGenFunction.h >> >> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=216410&r1=216409&r2=216410&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Mon Aug 25 16:58:56 2014 >> @@ -1690,13 +1690,12 @@ void CodeGenFunction::EmitCXXConstructor >> void >> CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl >> *D, >> llvm::Value *This, llvm::Value >> *Src, >> - CallExpr::const_arg_iterator >> ArgBeg, >> - CallExpr::const_arg_iterator >> ArgEnd) { >> + const CXXConstructExpr *E) { >> if (D->isTrivial()) { >> - assert(ArgBeg + 1 == ArgEnd && "unexpected argcount for trivial >> ctor"); >> + assert(E->getNumArgs() && "unexpected argcount for trivial ctor"); >> > Shouldn't this be "E->getNumArgs() == 1"? > Ah, indeed =/. Fixed in r216479. Thanks for catching this! > > assert(D->isCopyOrMoveConstructor() && >> "trivial 1-arg ctor not a copy/move ctor"); >> - EmitAggregateCopy(This, Src, (*ArgBeg)->getType()); >> + EmitAggregateCopy(This, Src, E->arg_begin()->getType()); >> return; >> } >> llvm::Value *Callee = CGM.GetAddrOfCXXConstructor(D, >> clang::Ctor_Complete); >> @@ -1718,7 +1717,7 @@ CodeGenFunction::EmitSynthesizedCXXCopyC >> >> // Skip over first argument (Src). >> EmitCallArgs(Args, FPT->isVariadic(), FPT->param_type_begin() + 1, >> - FPT->param_type_end(), ArgBeg + 1, ArgEnd); >> + FPT->param_type_end(), E->arg_begin() + 1, E->arg_end()); >> >> EmitCall(CGM.getTypes().arrangeCXXMethodCall(Args, FPT, >> RequiredArgs::All), >> Callee, ReturnValueSlot(), Args, D); >> >> Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=216410&r1=216409&r2=216410&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Mon Aug 25 16:58:56 2014 >> @@ -154,13 +154,13 @@ RValue CodeGenFunction::EmitCXXMemberCal >> EmitAggregateAssign(This, RHS, CE->getType()); >> return RValue::get(This); >> } >> - >> - if (isa<CXXConstructorDecl>(MD) && >> + >> + if (isa<CXXConstructorDecl>(MD) && >> cast<CXXConstructorDecl>(MD)->isCopyOrMoveConstructor()) { >> // Trivial move and copy ctor are the same. >> + assert(CE->getNumArgs() == 1 && "unexpected argcount for trivial >> ctor"); >> llvm::Value *RHS = EmitLValue(*CE->arg_begin()).getAddress(); >> - EmitSynthesizedCXXCopyCtorCall(cast<CXXConstructorDecl>(MD), This, >> RHS, >> - CE->arg_begin(), CE->arg_end()); >> + EmitAggregateCopy(This, RHS, CE->arg_begin()->getType()); >> return RValue::get(This); >> } >> llvm_unreachable("unknown trivial member function"); >> @@ -452,7 +452,7 @@ CodeGenFunction::EmitSynthesizedCXXCopyC >> >> assert(!getContext().getAsConstantArrayType(E->getType()) >> && "EmitSynthesizedCXXCopyCtor - Copied-in Array"); >> - EmitSynthesizedCXXCopyCtorCall(CD, Dest, Src, E->arg_begin(), >> E->arg_end()); >> + EmitSynthesizedCXXCopyCtorCall(CD, Dest, Src, E); >> } >> >> static CharUnits CalculateCookiePadding(CodeGenFunction &CGF, >> >> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=216410&r1=216409&r2=216410&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original) >> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Mon Aug 25 16:58:56 2014 >> @@ -1653,8 +1653,7 @@ public: >> >> void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D, >> llvm::Value *This, llvm::Value *Src, >> - CallExpr::const_arg_iterator ArgBeg, >> - CallExpr::const_arg_iterator ArgEnd); >> + const CXXConstructExpr *E); >> >> void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, >> const ConstantArrayType *ArrayTy, >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > > -- Alexey Samsonov [email protected]
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
