Add code to setup the vtable pointer in the constructor. Work in progress.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77699 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index 11c7e6d..cc481be 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -377,6 +377,8 @@
if (ClassTemplateDecl *TD = getParent()->getDescribedClassTemplate())
ClassTy = TD->getInjectedClassNameType(C);
else
+ // FIXME: What is the design on getTagDeclType when it requires casting
+ // away const? mutable?
ClassTy = C.getTagDeclType(const_cast<CXXRecordDecl*>(getParent()));
ClassTy = ClassTy.getWithAdditionalQualifiers(getTypeQualifiers());
return C.getPointerType(ClassTy);
@@ -652,7 +654,7 @@
AllToInit.push_back(Member);
}
}
-
+
NumInitializers = AllToInit.size();
if (NumInitializers > 0) {
NumBaseOrMemberInitializers = NumInitializers;
diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp
index 41bd521..901d5a5 100644
--- a/lib/AST/RecordLayoutBuilder.cpp
+++ b/lib/AST/RecordLayoutBuilder.cpp
@@ -27,7 +27,7 @@
void ASTRecordLayoutBuilder::LayoutVtable(const CXXRecordDecl *RD) {
if (RD->isPolymorphic() || RD->getNumVBases())
{
- assert (RD->getNumBases() == 0 && "no polymorphic inheritance yet");
+ // assert (RD->getNumBases() == 0 && "no polymorphic inheritance yet");
int AS = 0;
UpdateAlignment(Ctx.Target.getPointerAlign(AS));
Size += Ctx.Target.getPointerWidth(AS);