]> granicus.if.org Git - clang/commitdiff
[analyzer] Convert VisitDeclStmt to use local node builder.
authorAnna Zaks <ganna@apple.com>
Mon, 24 Oct 2011 18:26:12 +0000 (18:26 +0000)
committerAnna Zaks <ganna@apple.com>
Mon, 24 Oct 2011 18:26:12 +0000 (18:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142830 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
lib/StaticAnalyzer/Core/ExprEngine.cpp
lib/StaticAnalyzer/Core/ExprEngineC.cpp

index 7321b8bd849ee045a0ab42a9b3f7bc10beadc979..47682a2ac50ec0310614f57c06964b14476dbafa 100644 (file)
@@ -283,6 +283,24 @@ public:
                     C.ContextPred->getLocationContext()->getCurrentStackFrame(),
                     C.Block->getBlockID());
   }
+
+  void takeNodes(const ExplodedNodeSet &S) {
+    for (ExplodedNodeSet::iterator I = S.begin(), E = S.end(); I != E; ++I )
+      Frontier.erase(*I);
+  }
+
+  void takeNodes(ExplodedNode *N) {
+    Frontier.erase(N);
+  }
+
+  void addNodes(const ExplodedNodeSet &S) {
+    Frontier.insert(S);
+  }
+
+  void addNodes(ExplodedNode *N) {
+    Frontier.Add(N);
+  }
+
 };
 
 class CommonNodeBuilder {
@@ -403,23 +421,6 @@ public:
     BuildSinks = Tmp;
     return N;
   }
-
-  void takeNodes(const ExplodedNodeSet &S) {
-    for (ExplodedNodeSet::iterator I = S.begin(), E = S.end(); I != E; ++I )
-      Frontier.erase(*I);
-  }
-
-  void takeNodes(ExplodedNode *N) {
-    Frontier.erase(N);
-  }
-
-  void addNodes(const ExplodedNodeSet &S) {
-    Frontier.insert(S);
-  }
-
-  void addNodes(ExplodedNode *N) {
-    Frontier.Add(N);
-  }
 };
 
 class BranchNodeBuilder: public NodeBuilder {
index 781106c30b5f0438b6c454dfbb12c4b704b27d0f..5999dc6bb1dc6d8674fc67f39b607f14e338c0fa 100644 (file)
@@ -1297,7 +1297,7 @@ void ExprEngine::evalBind(ExplodedNodeSet &Dst, const Stmt *StoreE,
   getCheckerManager().runCheckersForBind(CheckedSet, Pred, location, Val,
                                          StoreE, *this);
 
-  // TODO: Remove TmpDst after NB refactoring is done.                                        
+  // TODO:AZ Remove TmpDst after NB refactoring is done.
   ExplodedNodeSet TmpDst;
   Builder->takeNodes(CheckedSet);
   PureStmtNodeBuilder Bldr(CheckedSet, TmpDst, *currentBuilderContext);
index dc6bbc69f72be51ef8ff55ee5e020144336abe79..b70a5f1e14f25db553bd7e3335af8ae9d2227070 100644 (file)
@@ -302,6 +302,9 @@ void ExprEngine::VisitCast(const CastExpr *CastE, const Expr *Ex,
 void ExprEngine::VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL,
                                           ExplodedNode *Pred,
                                           ExplodedNodeSet &Dst) {
+  PureStmtNodeBuilder B(Pred, Dst, *currentBuilderContext);
+  Builder->takeNodes(Pred);
+
   const InitListExpr *ILE 
     = cast<InitListExpr>(CL->getInitializer()->IgnoreParens());
   
@@ -311,9 +314,10 @@ void ExprEngine::VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL,
   state = state->bindCompoundLiteral(CL, LC, ILV);
   
   if (CL->isLValue())
-    MakeNode(Dst, CL, Pred, state->BindExpr(CL, state->getLValue(CL, LC)));
+    B.generateNode(CL, Pred, state->BindExpr(CL, state->getLValue(CL, LC)));
   else
-    MakeNode(Dst, CL, Pred, state->BindExpr(CL, ILV));
+    B.generateNode(CL, Pred, state->BindExpr(CL, ILV));
+  Builder->addNodes(Dst);
 }
 
 void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
@@ -333,8 +337,9 @@ void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
   ExplodedNodeSet dstPreVisit;
   getCheckerManager().runCheckersForPreStmt(dstPreVisit, Pred, DS, *this);
   
+  PureStmtNodeBuilder B(dstPreVisit, Dst, *currentBuilderContext);
+  Builder->takeNodes(dstPreVisit);
   const VarDecl *VD = dyn_cast<VarDecl>(D);
-  
   for (ExplodedNodeSet::iterator I = dstPreVisit.begin(), E = dstPreVisit.end();
        I!=E; ++I) {
     ExplodedNode *N = *I;
@@ -362,13 +367,15 @@ void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
         InitVal = svalBuilder.getConjuredSymbolVal(NULL, InitEx,
                                                    Builder->getCurrentBlockCount());
       }
-      
+      B.takeNodes(N);
       evalBind(Dst, DS, N, state->getLValue(VD, LC), InitVal, true);
+      B.addNodes(Dst);
     }
     else {
-      MakeNode(Dst, DS, N, state->bindDeclWithNoInit(state->getRegion(VD, LC)));
+      B.generateNode(DS, N,state->bindDeclWithNoInit(state->getRegion(VD, LC)));
     }
   }
+  Builder->addNodes(Dst);
 }
 
 void ExprEngine::VisitLogicalExpr(const BinaryOperator* B, ExplodedNode *Pred,