forked from OSchip/llvm-project
[AST] Use unique_ptr for VTableLayout.
Reviewers: timshen Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25421 llvm-svn: 283769
This commit is contained in:
parent
20ebffc99a
commit
072f9ba99a
|
@ -313,8 +313,9 @@ private:
|
||||||
typedef llvm::DenseMap<GlobalDecl, int64_t> MethodVTableIndicesTy;
|
typedef llvm::DenseMap<GlobalDecl, int64_t> MethodVTableIndicesTy;
|
||||||
MethodVTableIndicesTy MethodVTableIndices;
|
MethodVTableIndicesTy MethodVTableIndices;
|
||||||
|
|
||||||
typedef llvm::DenseMap<const CXXRecordDecl *, const VTableLayout *>
|
typedef llvm::DenseMap<const CXXRecordDecl *,
|
||||||
VTableLayoutMapTy;
|
std::unique_ptr<const VTableLayout>>
|
||||||
|
VTableLayoutMapTy;
|
||||||
VTableLayoutMapTy VTableLayouts;
|
VTableLayoutMapTy VTableLayouts;
|
||||||
|
|
||||||
typedef std::pair<const CXXRecordDecl *,
|
typedef std::pair<const CXXRecordDecl *,
|
||||||
|
@ -341,11 +342,9 @@ public:
|
||||||
return *VTableLayouts[RD];
|
return *VTableLayouts[RD];
|
||||||
}
|
}
|
||||||
|
|
||||||
VTableLayout *
|
std::unique_ptr<VTableLayout> createConstructionVTableLayout(
|
||||||
createConstructionVTableLayout(const CXXRecordDecl *MostDerivedClass,
|
const CXXRecordDecl *MostDerivedClass, CharUnits MostDerivedClassOffset,
|
||||||
CharUnits MostDerivedClassOffset,
|
bool MostDerivedClassIsVirtual, const CXXRecordDecl *LayoutClass);
|
||||||
bool MostDerivedClassIsVirtual,
|
|
||||||
const CXXRecordDecl *LayoutClass);
|
|
||||||
|
|
||||||
/// \brief Locate a virtual function in the vtable.
|
/// \brief Locate a virtual function in the vtable.
|
||||||
///
|
///
|
||||||
|
|
|
@ -2234,9 +2234,7 @@ VTableLayout::~VTableLayout() { }
|
||||||
ItaniumVTableContext::ItaniumVTableContext(ASTContext &Context)
|
ItaniumVTableContext::ItaniumVTableContext(ASTContext &Context)
|
||||||
: VTableContextBase(/*MS=*/false) {}
|
: VTableContextBase(/*MS=*/false) {}
|
||||||
|
|
||||||
ItaniumVTableContext::~ItaniumVTableContext() {
|
ItaniumVTableContext::~ItaniumVTableContext() {}
|
||||||
llvm::DeleteContainerSeconds(VTableLayouts);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t ItaniumVTableContext::getMethodVTableIndex(GlobalDecl GD) {
|
uint64_t ItaniumVTableContext::getMethodVTableIndex(GlobalDecl GD) {
|
||||||
MethodVTableIndicesTy::iterator I = MethodVTableIndices.find(GD);
|
MethodVTableIndicesTy::iterator I = MethodVTableIndices.find(GD);
|
||||||
|
@ -2280,21 +2278,20 @@ ItaniumVTableContext::getVirtualBaseOffsetOffset(const CXXRecordDecl *RD,
|
||||||
return I->second;
|
return I->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VTableLayout *CreateVTableLayout(const ItaniumVTableBuilder &Builder) {
|
static std::unique_ptr<VTableLayout>
|
||||||
|
CreateVTableLayout(const ItaniumVTableBuilder &Builder) {
|
||||||
SmallVector<VTableLayout::VTableThunkTy, 1>
|
SmallVector<VTableLayout::VTableThunkTy, 1>
|
||||||
VTableThunks(Builder.vtable_thunks_begin(), Builder.vtable_thunks_end());
|
VTableThunks(Builder.vtable_thunks_begin(), Builder.vtable_thunks_end());
|
||||||
|
|
||||||
return new VTableLayout(Builder.getNumVTableComponents(),
|
return llvm::make_unique<VTableLayout>(
|
||||||
Builder.vtable_component_begin(),
|
Builder.getNumVTableComponents(), Builder.vtable_component_begin(),
|
||||||
VTableThunks.size(),
|
VTableThunks.size(), VTableThunks.data(), Builder.getAddressPoints(),
|
||||||
VTableThunks.data(),
|
/*IsMicrosoftABI=*/false);
|
||||||
Builder.getAddressPoints(),
|
|
||||||
/*IsMicrosoftABI=*/false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ItaniumVTableContext::computeVTableRelatedInformation(const CXXRecordDecl *RD) {
|
ItaniumVTableContext::computeVTableRelatedInformation(const CXXRecordDecl *RD) {
|
||||||
const VTableLayout *&Entry = VTableLayouts[RD];
|
std::unique_ptr<const VTableLayout> &Entry = VTableLayouts[RD];
|
||||||
|
|
||||||
// Check if we've computed this information before.
|
// Check if we've computed this information before.
|
||||||
if (Entry)
|
if (Entry)
|
||||||
|
@ -2330,7 +2327,8 @@ ItaniumVTableContext::computeVTableRelatedInformation(const CXXRecordDecl *RD) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VTableLayout *ItaniumVTableContext::createConstructionVTableLayout(
|
std::unique_ptr<VTableLayout>
|
||||||
|
ItaniumVTableContext::createConstructionVTableLayout(
|
||||||
const CXXRecordDecl *MostDerivedClass, CharUnits MostDerivedClassOffset,
|
const CXXRecordDecl *MostDerivedClass, CharUnits MostDerivedClassOffset,
|
||||||
bool MostDerivedClassIsVirtual, const CXXRecordDecl *LayoutClass) {
|
bool MostDerivedClassIsVirtual, const CXXRecordDecl *LayoutClass) {
|
||||||
ItaniumVTableBuilder Builder(*this, MostDerivedClass, MostDerivedClassOffset,
|
ItaniumVTableBuilder Builder(*this, MostDerivedClass, MostDerivedClassOffset,
|
||||||
|
|
Loading…
Reference in New Issue