Convert OffsetFromNearestVBast parameter of InitializeVTablePointer(s) to
CharUnits. No change in functionality intended. llvm-svn: 128129
This commit is contained in:
parent
ecc114745e
commit
3fb4c8920d
|
@ -1338,7 +1338,7 @@ CodeGenFunction::GetVirtualBaseClassOffset(llvm::Value *This,
|
|||
void
|
||||
CodeGenFunction::InitializeVTablePointer(BaseSubobject Base,
|
||||
const CXXRecordDecl *NearestVBase,
|
||||
uint64_t OffsetFromNearestVBase,
|
||||
CharUnits OffsetFromNearestVBase,
|
||||
llvm::Constant *VTable,
|
||||
const CXXRecordDecl *VTableClass) {
|
||||
const CXXRecordDecl *RD = Base.getBase();
|
||||
|
@ -1375,8 +1375,7 @@ CodeGenFunction::InitializeVTablePointer(BaseSubobject Base,
|
|||
// might have a different offset in the most derived class.
|
||||
VirtualOffset = GetVirtualBaseClassOffset(LoadCXXThis(), VTableClass,
|
||||
NearestVBase);
|
||||
NonVirtualOffset =
|
||||
CGM.getContext().toCharUnitsFromBits(OffsetFromNearestVBase);
|
||||
NonVirtualOffset = OffsetFromNearestVBase;
|
||||
} else {
|
||||
// We can just use the base offset in the complete class.
|
||||
NonVirtualOffset =
|
||||
|
@ -1401,7 +1400,7 @@ CodeGenFunction::InitializeVTablePointer(BaseSubobject Base,
|
|||
void
|
||||
CodeGenFunction::InitializeVTablePointers(BaseSubobject Base,
|
||||
const CXXRecordDecl *NearestVBase,
|
||||
uint64_t OffsetFromNearestVBase,
|
||||
CharUnits OffsetFromNearestVBase,
|
||||
bool BaseIsNonVirtualPrimaryBase,
|
||||
llvm::Constant *VTable,
|
||||
const CXXRecordDecl *VTableClass,
|
||||
|
@ -1426,8 +1425,8 @@ CodeGenFunction::InitializeVTablePointers(BaseSubobject Base,
|
|||
if (!BaseDecl->isDynamicClass())
|
||||
continue;
|
||||
|
||||
uint64_t BaseOffset;
|
||||
uint64_t BaseOffsetFromNearestVBase;
|
||||
CharUnits BaseOffset;
|
||||
CharUnits BaseOffsetFromNearestVBase;
|
||||
bool BaseDeclIsNonVirtualPrimaryBase;
|
||||
|
||||
if (I->isVirtual()) {
|
||||
|
@ -1438,20 +1437,22 @@ CodeGenFunction::InitializeVTablePointers(BaseSubobject Base,
|
|||
const ASTRecordLayout &Layout =
|
||||
getContext().getASTRecordLayout(VTableClass);
|
||||
|
||||
BaseOffset = Layout.getVBaseClassOffsetInBits(BaseDecl);
|
||||
BaseOffsetFromNearestVBase = 0;
|
||||
BaseOffset = Layout.getVBaseClassOffset(BaseDecl);
|
||||
BaseOffsetFromNearestVBase = CharUnits::Zero();
|
||||
BaseDeclIsNonVirtualPrimaryBase = false;
|
||||
} else {
|
||||
const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
|
||||
|
||||
BaseOffset =
|
||||
Base.getBaseOffset() + Layout.getBaseClassOffsetInBits(BaseDecl);
|
||||
getContext().toCharUnitsFromBits(Base.getBaseOffset()) +
|
||||
Layout.getBaseClassOffset(BaseDecl);
|
||||
BaseOffsetFromNearestVBase =
|
||||
OffsetFromNearestVBase + Layout.getBaseClassOffsetInBits(BaseDecl);
|
||||
OffsetFromNearestVBase + Layout.getBaseClassOffset(BaseDecl);
|
||||
BaseDeclIsNonVirtualPrimaryBase = Layout.getPrimaryBase() == BaseDecl;
|
||||
}
|
||||
|
||||
InitializeVTablePointers(BaseSubobject(BaseDecl, BaseOffset),
|
||||
InitializeVTablePointers(BaseSubobject(BaseDecl,
|
||||
getContext().toBits(BaseOffset)),
|
||||
I->isVirtual() ? BaseDecl : NearestVBase,
|
||||
BaseOffsetFromNearestVBase,
|
||||
BaseDeclIsNonVirtualPrimaryBase,
|
||||
|
@ -1470,7 +1471,7 @@ void CodeGenFunction::InitializeVTablePointers(const CXXRecordDecl *RD) {
|
|||
// Initialize the vtable pointers for this class and all of its bases.
|
||||
VisitedVirtualBasesSetTy VBases;
|
||||
InitializeVTablePointers(BaseSubobject(RD, 0), /*NearestVBase=*/0,
|
||||
/*OffsetFromNearestVBase=*/0,
|
||||
/*OffsetFromNearestVBase=*/CharUnits::Zero(),
|
||||
/*BaseIsNonVirtualPrimaryBase=*/false,
|
||||
VTable, RD, VBases);
|
||||
}
|
||||
|
|
|
@ -1161,14 +1161,14 @@ public:
|
|||
///
|
||||
void InitializeVTablePointer(BaseSubobject Base,
|
||||
const CXXRecordDecl *NearestVBase,
|
||||
uint64_t OffsetFromNearestVBase,
|
||||
CharUnits OffsetFromNearestVBase,
|
||||
llvm::Constant *VTable,
|
||||
const CXXRecordDecl *VTableClass);
|
||||
|
||||
typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedVirtualBasesSetTy;
|
||||
void InitializeVTablePointers(BaseSubobject Base,
|
||||
const CXXRecordDecl *NearestVBase,
|
||||
uint64_t OffsetFromNearestVBase,
|
||||
CharUnits OffsetFromNearestVBase,
|
||||
bool BaseIsNonVirtualPrimaryBase,
|
||||
llvm::Constant *VTable,
|
||||
const CXXRecordDecl *VTableClass,
|
||||
|
|
Loading…
Reference in New Issue