r216410 - Pass actual CXXConstructExpr instead of argument iterators

Alexey Samsonov vonosmas at gmail.com
Tue Aug 26 13:28:42 PDT 2014


On Mon, Aug 25, 2014 at 7:28 PM, Richard Trieu <rtrieu at google.com> wrote:

>
>
>
> 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"?
>

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
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>


-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140826/c48f368b/attachment.html>


More information about the cfe-commits mailing list