summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-02-09 06:48:19 +0000
committerAnna Zaks <ganna@apple.com>2012-02-09 06:48:19 +0000
commit78edc2fb3c6b50ff14711d913de705caa25f3fbb (patch)
treedba51f1d03433c73debe440b8635b10b17b1c5cd /clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
parent4d59eebb49082306d2d9a53b5aa1ea3443fdd3c2 (diff)
downloadbcm5719-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.cpp22
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);
+ }
}
}
OpenPOWER on IntegriCloud