diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-02-27 22:51:43 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-02-27 22:51:43 +0000 |
commit | d6f9b83ae1a196df4090a10e7b1e9ef5e01f61c6 (patch) | |
tree | e0f70ff93543109248ff9f03aa6b3340ccd54c14 /clang/lib | |
parent | 451ca2924c6ecf542ffd94960d6c29453732384f (diff) | |
download | bcm5719-llvm-d6f9b83ae1a196df4090a10e7b1e9ef5e01f61c6.tar.gz bcm5719-llvm-d6f9b83ae1a196df4090a10e7b1e9ef5e01f61c6.zip |
MS ABI: Attempt to fix DenseMap entry reference invalidation
llvm-svn: 202441
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/VTableBuilder.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp index f12313e6439..1531614c8f8 100644 --- a/clang/lib/AST/VTableBuilder.cpp +++ b/clang/lib/AST/VTableBuilder.cpp @@ -3387,11 +3387,12 @@ void MicrosoftVTableContext::computeVTableRelatedInformation( const VTableLayout::AddressPointsMapTy EmptyAddressPointsMap; - VPtrInfoVector &VFPtrs = VFPtrLocations[RD]; - computeVTablePaths(/*ForVBTables=*/false, RD, VFPtrs); + VPtrInfoVector *VFPtrs = new VPtrInfoVector(); + computeVTablePaths(/*ForVBTables=*/false, RD, *VFPtrs); + VFPtrLocations[RD] = VFPtrs; MethodVFTableLocationsTy NewMethodLocations; - for (VPtrInfoVector::iterator I = VFPtrs.begin(), E = VFPtrs.end(); + for (VPtrInfoVector::iterator I = VFPtrs->begin(), E = VFPtrs->end(); I != E; ++I) { VFTableBuilder Builder(*this, RD, *I); @@ -3530,7 +3531,7 @@ MicrosoftVTableContext::getVFPtrOffsets(const CXXRecordDecl *RD) { computeVTableRelatedInformation(RD); assert(VFPtrLocations.count(RD) && "Couldn't find vfptr locations"); - return VFPtrLocations[RD]; + return *VFPtrLocations[RD]; } const VTableLayout & |