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