Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
Use unique_ptr for VTableBuilder::VBaseInfo map.
Browse files Browse the repository at this point in the history
Reviewers: timshen

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D25424

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@283772 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Justin Lebar committed Oct 10, 2016
1 parent be96a85 commit c4e9e7b
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 17 deletions.
5 changes: 3 additions & 2 deletions include/clang/AST/VTableBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,8 @@ class MicrosoftVTableContext : public VTableContextBase {
VFTableLayoutMapTy;
VFTableLayoutMapTy VFTableLayouts;

llvm::DenseMap<const CXXRecordDecl *, VirtualBaseInfo *> VBaseInfo;
llvm::DenseMap<const CXXRecordDecl *, std::unique_ptr<VirtualBaseInfo>>
VBaseInfo;

void enumerateVFPtrs(const CXXRecordDecl *ForClass, VPtrInfoVector &Result);

Expand All @@ -494,7 +495,7 @@ class MicrosoftVTableContext : public VTableContextBase {
const MethodVFTableLocationsTy &NewMethods,
raw_ostream &);

const VirtualBaseInfo *
const VirtualBaseInfo &
computeVBTableRelatedInformation(const CXXRecordDecl *RD);

void computeVTablePaths(bool ForVBTables, const CXXRecordDecl *RD,
Expand Down
29 changes: 14 additions & 15 deletions lib/AST/VTableBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3388,9 +3388,7 @@ static bool rebucketPaths(VPtrInfoVector &Paths) {
return Changed;
}

MicrosoftVTableContext::~MicrosoftVTableContext() {
llvm::DeleteContainerSeconds(VBaseInfo);
}
MicrosoftVTableContext::~MicrosoftVTableContext() {}

namespace {
typedef llvm::SetVector<BaseSubobject, std::vector<BaseSubobject>,
Expand Down Expand Up @@ -3670,17 +3668,18 @@ void MicrosoftVTableContext::dumpMethodLocations(
Out.flush();
}

const VirtualBaseInfo *MicrosoftVTableContext::computeVBTableRelatedInformation(
const VirtualBaseInfo &MicrosoftVTableContext::computeVBTableRelatedInformation(
const CXXRecordDecl *RD) {
VirtualBaseInfo *VBI;

{
// Get or create a VBI for RD. Don't hold a reference to the DenseMap cell,
// as it may be modified and rehashed under us.
VirtualBaseInfo *&Entry = VBaseInfo[RD];
std::unique_ptr<VirtualBaseInfo> &Entry = VBaseInfo[RD];
if (Entry)
return Entry;
Entry = VBI = new VirtualBaseInfo();
return *Entry;
Entry = llvm::make_unique<VirtualBaseInfo>();
VBI = Entry.get();
}

computeVTablePaths(/*ForVBTables=*/true, RD, VBI->VBPtrPaths);
Expand All @@ -3690,10 +3689,10 @@ const VirtualBaseInfo *MicrosoftVTableContext::computeVBTableRelatedInformation(
if (const CXXRecordDecl *VBPtrBase = Layout.getBaseSharingVBPtr()) {
// If the Derived class shares the vbptr with a non-virtual base, the shared
// virtual bases come first so that the layout is the same.
const VirtualBaseInfo *BaseInfo =
const VirtualBaseInfo &BaseInfo =
computeVBTableRelatedInformation(VBPtrBase);
VBI->VBTableIndices.insert(BaseInfo->VBTableIndices.begin(),
BaseInfo->VBTableIndices.end());
VBI->VBTableIndices.insert(BaseInfo.VBTableIndices.begin(),
BaseInfo.VBTableIndices.end());
}

// New vbases are added to the end of the vbtable.
Expand All @@ -3705,19 +3704,19 @@ const VirtualBaseInfo *MicrosoftVTableContext::computeVBTableRelatedInformation(
VBI->VBTableIndices[CurVBase] = VBTableIndex++;
}

return VBI;
return *VBI;
}

unsigned MicrosoftVTableContext::getVBTableIndex(const CXXRecordDecl *Derived,
const CXXRecordDecl *VBase) {
const VirtualBaseInfo *VBInfo = computeVBTableRelatedInformation(Derived);
assert(VBInfo->VBTableIndices.count(VBase));
return VBInfo->VBTableIndices.find(VBase)->second;
const VirtualBaseInfo &VBInfo = computeVBTableRelatedInformation(Derived);
assert(VBInfo.VBTableIndices.count(VBase));
return VBInfo.VBTableIndices.find(VBase)->second;
}

const VPtrInfoVector &
MicrosoftVTableContext::enumerateVBTables(const CXXRecordDecl *RD) {
return computeVBTableRelatedInformation(RD)->VBPtrPaths;
return computeVBTableRelatedInformation(RD).VBPtrPaths;
}

const VPtrInfoVector &
Expand Down

0 comments on commit c4e9e7b

Please sign in to comment.