mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 17:28:30 +08:00
Handle primary bases in AddVCallOffsets.
llvm-svn: 96461
This commit is contained in:
@@ -985,10 +985,17 @@ VtableBuilder::AddVCallAndVBaseOffsets(BaseSubobject Base,
|
||||
|
||||
void VtableBuilder::AddVCallOffsets(BaseSubobject Base) {
|
||||
const CXXRecordDecl *RD = Base.getBase();
|
||||
|
||||
const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
|
||||
|
||||
// Handle the primary base first.
|
||||
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.
|
||||
for (CXXRecordDecl::method_iterator I = RD->method_begin(),
|
||||
|
||||
Reference in New Issue
Block a user