From 9cdd1e3450a07c1bafc32c96f1db88084497f282 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 13 Apr 2012 23:09:10 +0000 Subject: [PATCH] Delete the TypoResultsMap when erasing the pointer to it. This manual deleting is error-prone, but we can't just put an OwningPtr in a std::map :( git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154707 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaLookup.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index 966eb90306..06697b6a68 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -3207,7 +3207,10 @@ public: typedef TypoEditDistanceMap::iterator distance_iterator; distance_iterator begin() { return BestResults.begin(); } distance_iterator end() { return BestResults.end(); } - void erase(distance_iterator I) { BestResults.erase(I); } + void erase(distance_iterator I) { + delete I->second; + BestResults.erase(I); + } unsigned size() const { return BestResults.size(); } bool empty() const { return BestResults.empty(); } @@ -3289,12 +3292,8 @@ void TypoCorrectionConsumer::addCorrection(TypoCorrection Correction) { CurrentCorrection.getAsString(SemaRef.getLangOpts())) CurrentCorrection = Correction; - while (BestResults.size() > MaxTypoDistanceResultSets) { - TypoEditDistanceMap::iterator Last = BestResults.end(); - --Last; - delete Last->second; - BestResults.erase(Last); - } + while (BestResults.size() > MaxTypoDistanceResultSets) + erase(llvm::prior(BestResults.end())); } // Fill the supplied vector with the IdentifierInfo pointers for each piece of -- 2.40.0