summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2011-10-11 17:29:59 +0000
committerAnna Zaks <ganna@apple.com>2011-10-11 17:29:59 +0000
commit8c57c4ba277190eebbb0f9f55e10896febe12e09 (patch)
tree8f0c7a1ec55a41009dfcf15f1f279b7103d2a701 /clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
parenta95ec99a96a3afc48fcf446592f5f483ac683953 (diff)
downloadbcm5719-llvm-8c57c4ba277190eebbb0f9f55e10896febe12e09.tar.gz
bcm5719-llvm-8c57c4ba277190eebbb0f9f55e10896febe12e09.zip
[analyzer] CheckerContext updates checkDst in it's destructor, so make sure the object is destructed before checkDst is used.
llvm-svn: 141683
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/CheckerManager.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/CheckerManager.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
index 948ac1729cb..acacfb0e18c 100644
--- a/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
+++ b/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
@@ -445,9 +445,13 @@ void CheckerManager::runCheckersForEvalCall(ExplodedNodeSet &Dst,
ProgramPoint::Kind K = ProgramPoint::PostStmtKind;
const ProgramPoint &L = ProgramPoint::getProgramPoint(CE, K,
Pred->getLocationContext(), EI->Checker);
-
- CheckerContext C(checkDst, Eng.getBuilder(), Eng, Pred, L, 0);
- bool evaluated = (*EI)(CE, C);
+ bool evaluated = false;
+ { // CheckerContext generates transitions(populates checkDest) on
+ // destruction, so introduce the scope to make sure it gets properly
+ // populated.
+ CheckerContext C(checkDst, Eng.getBuilder(), Eng, Pred, L, 0);
+ evaluated = (*EI)(CE, C);
+ }
assert(!(evaluated && anyEvaluated)
&& "There are more than one checkers evaluating the call");
if (evaluated) {
OpenPOWER on IntegriCloud