diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-04-13 23:09:10 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-04-13 23:09:10 +0000 |
commit | 9cdd1e3450a07c1bafc32c96f1db88084497f282 (patch) | |
tree | 0574bfd80871520c1127cf4e2b4c5f3a3b24a062 /lib/Sema/SemaLookup.cpp | |
parent | 38baeabb253f3e04d5b54bf834dbd9f5ebdc9e5c (diff) |
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
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
-rw-r--r-- | lib/Sema/SemaLookup.cpp | 13 |
1 files 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 |