From: Anders Carlsson Date: Fri, 30 Apr 2010 00:04:01 +0000 (+0000) Subject: Get the base class addresses before calling EmitClassCopyAssignment. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f406d9c68762163cf817230bca13030e4d10514e;p=clang Get the base class addresses before calling EmitClassCopyAssignment. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102676 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index 1641a83a60..98ed1b3b2f 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -778,13 +778,16 @@ void CodeGenFunction::SynthesizeCXXCopyAssignment(const FunctionArgList &Args) { for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(); Base != ClassDecl->bases_end(); ++Base) { - // FIXME. copy assignment of virtual base NYI - if (Base->isVirtual()) - continue; - + + llvm::Value *Dest = GetAddressOfBaseClass(ThisPtr, ClassDecl, + CXXBaseSpecifierArray(Base), + /*NullCheckValue=*/false); + llvm::Value *Src = GetAddressOfBaseClass(SrcPtr, ClassDecl, + CXXBaseSpecifierArray(Base), + /*NullCheckValue=*/false); CXXRecordDecl *BaseClassDecl = cast(Base->getType()->getAs()->getDecl()); - EmitClassCopyAssignment(ThisPtr, SrcPtr, ClassDecl, BaseClassDecl); + EmitClassCopyAssignment(Dest, Src, 0, BaseClassDecl); } for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),