summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2011-10-18 23:06:44 +0000
committerAnna Zaks <ganna@apple.com>2011-10-18 23:06:44 +0000
commita99b41f37fbdba04275136c511342cb3c7f22792 (patch)
tree453023879a39921301e090655272284b945eaad2 /clang/lib/StaticAnalyzer/Core/CoreEngine.cpp
parent1dd965eaa56958973abbbfea92c8d2743966200b (diff)
downloadbcm5719-llvm-a99b41f37fbdba04275136c511342cb3c7f22792.tar.gz
bcm5719-llvm-a99b41f37fbdba04275136c511342cb3c7f22792.zip
[analyzer] Make NodeBuilder and Pred node loosely coupled
NodeBuilder should not assume it's dealing with a single predecessor. Remove predecessor getters. Modify the BranchNodeBuilder to not be responsible for doing auto-transitions (which depend on a predecessor). llvm-svn: 142453
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/CoreEngine.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/CoreEngine.cpp15
1 files changed, 4 insertions, 11 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp
index 0a308670c0c..a40a0dc683c 100644
--- a/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/CoreEngine.cpp
@@ -316,7 +316,7 @@ void CoreEngine::HandleBlockEntrance(const BlockEntrance &L,
if (CFGElement E = L.getFirstElement()) {
NodeBuilderContext Ctx(*this, L.getBlock());
StmtNodeBuilder Builder(Pred, 0, Ctx);
- SubEng.processCFGElement(E, Builder);
+ SubEng.processCFGElement(E, Builder, Pred);
}
else
HandleBlockExit(L.getBlock(), Pred);
@@ -433,7 +433,7 @@ void CoreEngine::HandlePostStmt(const CFGBlock *B, unsigned StmtIdx,
else {
NodeBuilderContext Ctx(*this, B);
StmtNodeBuilder Builder(Pred, StmtIdx, Ctx);
- SubEng.processCFGElement((*B)[StmtIdx], Builder);
+ SubEng.processCFGElement((*B)[StmtIdx], Builder, Pred);
}
}
@@ -489,6 +489,8 @@ ExplodedNode* NodeBuilder::generateNodeImpl(const ProgramPoint &Loc,
const ProgramState *State,
ExplodedNode *FromN,
bool MarkAsSink) {
+ HasGeneratedNodes = true;
+
bool IsNew;
ExplodedNode *N = C.Eng.G->getNode(Loc, State, &IsNew);
N->addPredecessor(FromN, *C.Eng.G);
@@ -567,9 +569,6 @@ ExplodedNode *StmtNodeBuilder::MakeNode(ExplodedNodeSet &Dst,
ExplodedNode *BranchNodeBuilder::generateNode(const ProgramState *State,
bool branch,
ExplodedNode *NodePred) {
- assert(Finalized == false &&
- "We cannot create new nodes after the results have been finalized.");
-
// If the branch has been marked infeasible we should not generate a node.
if (!isFeasible(branch))
return NULL;
@@ -579,12 +578,6 @@ ExplodedNode *BranchNodeBuilder::generateNode(const ProgramState *State,
ProgramPoint Loc = BlockEdge(C.Block, branch ? DstT:DstF,
NodePred->getLocationContext());
ExplodedNode *Succ = generateNodeImpl(Loc, State, NodePred);
-
- if (branch)
- GeneratedTrue = true;
- else
- GeneratedFalse = true;
-
return Succ;
}
OpenPOWER on IntegriCloud