]> granicus.if.org Git - clang/commitdiff
Get the base class addresses before calling EmitClassCopyAssignment.
authorAnders Carlsson <andersca@mac.com>
Fri, 30 Apr 2010 00:04:01 +0000 (00:04 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 30 Apr 2010 00:04:01 +0000 (00:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102676 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp

index 1641a83a60e0d61bf63420d884614cc81e7dfab5..98ed1b3b2f05608cbd0e48ee3ce3a510dc9bc3e9 100644 (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(),