Get the base class addresses before calling EmitClassCopyAssignment.

llvm-svn: 102676
This commit is contained in:
Anders Carlsson
2010-04-30 00:04:01 +00:00
parent 2b4ec8d003
commit 786a3d910e

View File

@@ -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<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
EmitClassCopyAssignment(ThisPtr, SrcPtr, ClassDecl, BaseClassDecl);
EmitClassCopyAssignment(Dest, Src, 0, BaseClassDecl);
}
for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),