<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 25, 2014 at 7:28 PM, Richard Trieu <span dir="ltr"><<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div class="h5">On Mon, Aug 25, 2014 at 2:58 PM, Alexey Samsonov <span dir="ltr"><<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: samsonov<br>
Date: Mon Aug 25 16:58:56 2014<br>
New Revision: 216410<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216410&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216410&view=rev</a><br>
Log:<br>
Pass actual CXXConstructExpr instead of argument iterators<br>
into EmitSynthesizedCXXCopyCtorCall. No functionality change.<br>
<br>
Modified:<br>
    cfe/trunk/lib/CodeGen/CGClass.cpp<br>
    cfe/trunk/lib/CodeGen/CGExprCXX.cpp<br>
    cfe/trunk/lib/CodeGen/CodeGenFunction.h<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGClass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=216410&r1=216409&r2=216410&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=216410&r1=216409&r2=216410&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGClass.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGClass.cpp Mon Aug 25 16:58:56 2014<br>
@@ -1690,13 +1690,12 @@ void CodeGenFunction::EmitCXXConstructor<br>
 void<br>
 CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D,<br>
                                         llvm::Value *This, llvm::Value *Src,<br>
-                                        CallExpr::const_arg_iterator ArgBeg,<br>
-                                        CallExpr::const_arg_iterator ArgEnd) {<br>
+                                        const CXXConstructExpr *E) {<br>
   if (D->isTrivial()) {<br>
-    assert(ArgBeg + 1 == ArgEnd && "unexpected argcount for trivial ctor");<br>
+    assert(E->getNumArgs() && "unexpected argcount for trivial ctor");<br></blockquote></div></div><div>Shouldn't this be "E->getNumArgs() == 1"?</div></div></div></div></blockquote>
<div><br></div><div>Ah, indeed =/. Fixed in r216479. Thanks for catching this!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><div><div class="h5"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


     assert(D->isCopyOrMoveConstructor() &&<br>
            "trivial 1-arg ctor not a copy/move ctor");<br>
-    EmitAggregateCopy(This, Src, (*ArgBeg)->getType());<br>
+    EmitAggregateCopy(This, Src, E->arg_begin()->getType());<br>
     return;<br>
   }<br>
   llvm::Value *Callee = CGM.GetAddrOfCXXConstructor(D, clang::Ctor_Complete);<br>
@@ -1718,7 +1717,7 @@ CodeGenFunction::EmitSynthesizedCXXCopyC<br>
<br>
   // Skip over first argument (Src).<br>
   EmitCallArgs(Args, FPT->isVariadic(), FPT->param_type_begin() + 1,<br>
-               FPT->param_type_end(), ArgBeg + 1, ArgEnd);<br>
+               FPT->param_type_end(), E->arg_begin() + 1, E->arg_end());<br>
<br>
   EmitCall(CGM.getTypes().arrangeCXXMethodCall(Args, FPT, RequiredArgs::All),<br>
            Callee, ReturnValueSlot(), Args, D);<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=216410&r1=216409&r2=216410&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=216410&r1=216409&r2=216410&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Mon Aug 25 16:58:56 2014<br>
@@ -154,13 +154,13 @@ RValue CodeGenFunction::EmitCXXMemberCal<br>
       EmitAggregateAssign(This, RHS, CE->getType());<br>
       return RValue::get(This);<br>
     }<br>
-<br>
-    if (isa<CXXConstructorDecl>(MD) &&<br>
+<br>
+    if (isa<CXXConstructorDecl>(MD) &&<br>
         cast<CXXConstructorDecl>(MD)->isCopyOrMoveConstructor()) {<br>
       // Trivial move and copy ctor are the same.<br>
+      assert(CE->getNumArgs() == 1 && "unexpected argcount for trivial ctor");<br>
       llvm::Value *RHS = EmitLValue(*CE->arg_begin()).getAddress();<br>
-      EmitSynthesizedCXXCopyCtorCall(cast<CXXConstructorDecl>(MD), This, RHS,<br>
-                                     CE->arg_begin(), CE->arg_end());<br>
+      EmitAggregateCopy(This, RHS, CE->arg_begin()->getType());<br>
       return RValue::get(This);<br>
     }<br>
     llvm_unreachable("unknown trivial member function");<br>
@@ -452,7 +452,7 @@ CodeGenFunction::EmitSynthesizedCXXCopyC<br>
<br>
   assert(!getContext().getAsConstantArrayType(E->getType())<br>
          && "EmitSynthesizedCXXCopyCtor - Copied-in Array");<br>
-  EmitSynthesizedCXXCopyCtorCall(CD, Dest, Src, E->arg_begin(), E->arg_end());<br>
+  EmitSynthesizedCXXCopyCtorCall(CD, Dest, Src, E);<br>
 }<br>
<br>
 static CharUnits CalculateCookiePadding(CodeGenFunction &CGF,<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=216410&r1=216409&r2=216410&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=216410&r1=216409&r2=216410&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)<br>
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Mon Aug 25 16:58:56 2014<br>
@@ -1653,8 +1653,7 @@ public:<br>
<br>
   void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D,<br>
                               llvm::Value *This, llvm::Value *Src,<br>
-                              CallExpr::const_arg_iterator ArgBeg,<br>
-                              CallExpr::const_arg_iterator ArgEnd);<br>
+                              const CXXConstructExpr *E);<br>
<br>
   void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D,<br>
                                   const ConstantArrayType *ArrayTy,<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>
</div></div>