[cfe-commits] r136418 - /cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
Chris Lattner
clattner at apple.com
Fri Jul 29 10:29:58 PDT 2011
On Jul 28, 2011, at 4:07 PM, Ted Kremenek wrote:
> Author: kremenek
> Date: Thu Jul 28 18:07:51 2011
> New Revision: 136418
>
> URL: http://llvm.org/viewvc/llvm-project?rev=136418&view=rev
> Log:
> [analyzer] fix bug in malloc checker where the tracked symbol would not properly be removed from the state.
Testcase?
-Chris
>
> Modified:
> cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=136418&r1=136417&r2=136418&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Thu Jul 28 18:07:51 2011
> @@ -578,24 +578,31 @@
> RegionStateTy RS = state->get<RegionState>();
> RegionStateTy::Factory &F = state->get_context<RegionState>();
>
> + bool generateReport = false;
> +
> for (RegionStateTy::iterator I = RS.begin(), E = RS.end(); I != E; ++I) {
> if (SymReaper.isDead(I->first)) {
> - if (I->second.isAllocated()) {
> - if (ExplodedNode *N = C.generateNode()) {
> - 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);
> - C.EmitReport(R);
> - }
> - }
> + if (I->second.isAllocated())
> + generateReport = true;
>
> // Remove the dead symbol from the map.
> RS = F.remove(RS, I->first);
> +
> }
> }
> - C.generateNode(state->set<RegionState>(RS));
> +
> + ExplodedNode *N = C.generateNode(state->set<RegionState>(RS));
> +
> + // FIXME: This does not handle when we have multiple leaks at a single
> + // place.
> + 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);
> + C.EmitReport(R);
> + }
> }
>
> void MallocChecker::checkEndPath(EndOfFunctionNodeBuilder &B,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list