From: Anna Zaks Date: Tue, 11 Oct 2011 17:29:59 +0000 (+0000) Subject: [analyzer] CheckerContext updates checkDst in it's destructor, so make sure the objec... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b1576f7136163ce3efd6dcf5a3e53e1c8ec6520c;p=clang [analyzer] CheckerContext updates checkDst in it's destructor, so make sure the object is destructed before checkDst is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141683 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/CheckerManager.cpp b/lib/StaticAnalyzer/Core/CheckerManager.cpp index 948ac1729c..acacfb0e18 100644 --- a/lib/StaticAnalyzer/Core/CheckerManager.cpp +++ b/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) {