diff options
author | Anna Zaks <ganna@apple.com> | 2012-02-09 06:48:19 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-02-09 06:48:19 +0000 |
commit | 78edc2fb3c6b50ff14711d913de705caa25f3fbb (patch) | |
tree | dba51f1d03433c73debe440b8635b10b17b1c5cd /clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | |
parent | 4d59eebb49082306d2d9a53b5aa1ea3443fdd3c2 (diff) | |
download | bcm5719-llvm-78edc2fb3c6b50ff14711d913de705caa25f3fbb.tar.gz bcm5719-llvm-78edc2fb3c6b50ff14711d913de705caa25f3fbb.zip |
[analyzer] MallocChecker: address a diagnostic "fixme".
llvm-svn: 150158
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 4a15afd986e..7edc50d42f2 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -651,12 +651,13 @@ void MallocChecker::checkDeadSymbols(SymbolReaper &SymReaper, RegionStateTy::Factory &F = state->get_context<RegionState>(); bool generateReport = false; - + llvm::SmallVector<SymbolRef, 2> Errors; for (RegionStateTy::iterator I = RS.begin(), E = RS.end(); I != E; ++I) { if (SymReaper.isDead(I->first)) { - if (I->second.isAllocated()) + if (I->second.isAllocated()) { generateReport = true; - + Errors.push_back(I->first); + } // Remove the dead symbol from the map. RS = F.remove(RS, I->first); @@ -665,17 +666,16 @@ void MallocChecker::checkDeadSymbols(SymbolReaper &SymReaper, ExplodedNode *N = C.addTransition(state->set<RegionState>(RS)); - // FIXME: This does not handle when we have multiple leaks at a single - // place. - // TODO: We don't have symbol info in the diagnostics here! if (N && generateReport) { if (!BT_Leak) BT_Leak.reset(new BuiltinBug("Memory leak", - "Allocated memory never released. Potential memory leak.")); - // FIXME: where it is allocated. - BugReport *R = new BugReport(*BT_Leak, BT_Leak->getDescription(), N); - //Report->addVisitor(new MallocBugVisitor(Sym)); - C.EmitReport(R); + "Allocated memory never released. Potential memory leak.")); + for (llvm::SmallVector<SymbolRef, 2>::iterator + I = Errors.begin(), E = Errors.end(); I != E; ++I) { + BugReport *R = new BugReport(*BT_Leak, BT_Leak->getDescription(), N); + R->addVisitor(new MallocBugVisitor(*I)); + C.EmitReport(R); + } } } |