r216410 - Pass actual CXXConstructExpr instead of argument iterators

Richard Trieu rtrieu at google.com
Mon Aug 25 19:28:04 PDT 2014


On Mon, Aug 25, 2014 at 2:58 PM, Alexey Samsonov <vonosmas at gmail.com> 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"?

     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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140825/6b59df65/attachment.html>


More information about the cfe-commits mailing list