[cfe-commits] r141683 - /cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp

Anna Zaks ganna at apple.com
Tue Oct 11 10:30:00 PDT 2011


Author: zaks
Date: Tue Oct 11 12:29:59 2011
New Revision: 141683

URL: http://llvm.org/viewvc/llvm-project?rev=141683&view=rev
Log:
[analyzer] CheckerContext updates checkDst in it's destructor, so make sure the object is destructed before checkDst is used.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp?rev=141683&r1=141682&r2=141683&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/CheckerManager.cpp Tue Oct 11 12:29:59 2011
@@ -445,9 +445,13 @@
       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) {





More information about the cfe-commits mailing list