forked from OSchip/llvm-project
parent
e78bc753fe
commit
d2fd302726
|
@ -985,10 +985,17 @@ VtableBuilder::AddVCallAndVBaseOffsets(BaseSubobject Base,
|
||||||
|
|
||||||
void VtableBuilder::AddVCallOffsets(BaseSubobject Base) {
|
void VtableBuilder::AddVCallOffsets(BaseSubobject Base) {
|
||||||
const CXXRecordDecl *RD = Base.getBase();
|
const CXXRecordDecl *RD = Base.getBase();
|
||||||
|
|
||||||
const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
|
const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
|
||||||
|
|
||||||
|
// Handle the primary base first.
|
||||||
const CXXRecordDecl *PrimaryBase = Layout.getPrimaryBase();
|
const CXXRecordDecl *PrimaryBase = Layout.getPrimaryBase();
|
||||||
assert(!PrimaryBase && "FIXME: Handle the primary base!");
|
if (PrimaryBase && Layout.getPrimaryBaseWasVirtual()) {
|
||||||
|
// Get the base offset of the primary base.
|
||||||
|
uint64_t PrimaryBaseOffset = Base.getBaseOffset() +
|
||||||
|
Layout.getBaseClassOffset(PrimaryBase);
|
||||||
|
|
||||||
|
AddVCallOffsets(BaseSubobject(PrimaryBase, PrimaryBaseOffset));
|
||||||
|
}
|
||||||
|
|
||||||
// Add the vcall offsets.
|
// Add the vcall offsets.
|
||||||
for (CXXRecordDecl::method_iterator I = RD->method_begin(),
|
for (CXXRecordDecl::method_iterator I = RD->method_begin(),
|
||||||
|
|
Loading…
Reference in New Issue