Change getCtorVtable to not return the address point offset, but the global variable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90671 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGVtable.cpp b/lib/CodeGen/CGVtable.cpp
index 6600a24..6408853 100644
--- a/lib/CodeGen/CGVtable.cpp
+++ b/lib/CodeGen/CGVtable.cpp
@@ -1233,8 +1233,11 @@
           init = BuildVtablePtr(vtbl, VtblClass, RD, Offset);
         else {
           init = CGM.getVtableInfo().getCtorVtable(Class, Base, BaseOffset);
-          subvtbl = dyn_cast<llvm::Constant>(init->getOperand(0));
+          
+          subvtbl = init;
           subVtblClass = Base;
+          
+          init = BuildVtablePtr(init, Class, Base, BaseOffset);
         }
         Inits.push_back(init);
       }
@@ -1257,6 +1260,8 @@
       VtblClass = Class;
     } else {
       init = CGM.getVtableInfo().getCtorVtable(Class, RD, Offset);
+      init = BuildVtablePtr(init, RD, RD, Offset);
+      
       VtblClass = RD;
     }
     llvm::Constant *vtbl = dyn_cast<llvm::Constant>(init->getOperand(0));
@@ -1301,6 +1306,7 @@
       VirtualVTTs(Base);
     }
   }
+
 public:
   VTTBuilder(std::vector<llvm::Constant *> &inits, const CXXRecordDecl *c,
              CodeGenModule &cgm)
@@ -1412,7 +1418,9 @@
 llvm::Constant *CGVtableInfo::getCtorVtable(const CXXRecordDecl *LayoutClass,
                                             const CXXRecordDecl *RD,
                                             uint64_t Offset) {
-  return CGM.GenerateVtable(LayoutClass, RD, Offset);
+  llvm::Constant *Vtable = CGM.GenerateVtable(LayoutClass, RD, Offset);
+  
+  return cast<llvm::Constant>(Vtable->getOperand(0));
 }
 
 void CGVtableInfo::MaybeEmitVtable(GlobalDecl GD) {