Implemented more boilerplate in GREngine for processing branches. Now
we automatically generate a new successor node along an edge if the checker
did not explicitly do so (i.e., we just propagate the current state).
llvm-svn: 46536
diff --git a/clang/Analysis/GREngine.cpp b/clang/Analysis/GREngine.cpp
index 35101a9..43ee864 100644
--- a/clang/Analysis/GREngine.cpp
+++ b/clang/Analysis/GREngine.cpp
@@ -296,6 +296,14 @@
Succ->addPredecessor(Pred);
+ if (branch) GeneratedTrue = true;
+ else GeneratedFalse = true;
+
if (IsNew)
Eng.WList->Enqueue(GRWorkListUnit(Succ));
}
+
+GRBranchNodeBuilderImpl::~GRBranchNodeBuilderImpl() {
+ if (!GeneratedTrue) generateNodeImpl(Pred->State, true);
+ if (!GeneratedFalse) generateNodeImpl(Pred->State, false);
+}