diff options
-rw-r--r-- | lib/CodeGen/CGClass.cpp | 29 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 3 |
2 files changed, 10 insertions, 22 deletions
diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index 856cafe748..b4a5cbab3a 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -593,29 +593,18 @@ static llvm::Value *GetVTTParameter(CodeGenFunction &CGF, GlobalDecl GD) { /// or via a copy constructor call. void CodeGenFunction::EmitClassMemberwiseCopy( llvm::Value *Dest, llvm::Value *Src, - const CXXRecordDecl *ClassDecl, - const CXXRecordDecl *BaseClassDecl) { - CXXCtorType CtorType = Ctor_Complete; - - if (ClassDecl) { - Dest = OldGetAddressOfBaseClass(Dest, ClassDecl, BaseClassDecl); - Src = OldGetAddressOfBaseClass(Src, ClassDecl, BaseClassDecl); - - // We want to call the base constructor. - CtorType = Ctor_Base; - } - if (BaseClassDecl->hasTrivialCopyConstructor()) { - EmitAggregateCopy(Dest, Src, getContext().getTagDeclType(BaseClassDecl)); + const CXXRecordDecl *ClassDecl) { + if (ClassDecl->hasTrivialCopyConstructor()) { + EmitAggregateCopy(Dest, Src, getContext().getTagDeclType(ClassDecl)); return; } - CXXConstructorDecl *BaseCopyCtor = - BaseClassDecl->getCopyConstructor(getContext(), 0); - if (!BaseCopyCtor) - return; + CXXConstructorDecl *CopyCtor = ClassDecl->getCopyConstructor(getContext(), 0); + assert(CopyCtor && "Did not have copy ctor!"); - llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(BaseCopyCtor, CtorType)); - EmitCopyCtorCall(*this, BaseCopyCtor, CtorType, Dest, VTT, Src); + llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(CopyCtor, + Ctor_Complete)); + EmitCopyCtorCall(*this, CopyCtor, Ctor_Complete, Dest, VTT, Src); } /// EmitClassCopyAssignment - This routine generates code to copy assign a class @@ -718,7 +707,7 @@ CodeGenFunction::SynthesizeCXXCopyConstructor(const FunctionArgList &Args) { } else EmitClassMemberwiseCopy(LHS.getAddress(), RHS.getAddress(), - 0 /*ClassDecl*/, FieldClassDecl); + FieldClassDecl); continue; } diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 0f19c2eae1..b059488d67 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -818,8 +818,7 @@ public: QualType Ty); void EmitClassMemberwiseCopy(llvm::Value *DestValue, llvm::Value *SrcValue, - const CXXRecordDecl *ClassDecl, - const CXXRecordDecl *BaseClassDecl); + const CXXRecordDecl *ClassDecl); void EmitClassCopyAssignment(llvm::Value *DestValue, llvm::Value *SrcValue, const CXXRecordDecl *ClassDecl); |