[cfe-commits] r47876 - in /cfe/trunk: Analysis/GRExprEngine.cpp include/clang/Analysis/PathSensitive/GRExprEngine.h
Ted Kremenek
kremenek at apple.com
Mon Mar 3 16:56:45 PST 2008
Author: kremenek
Date: Mon Mar 3 18:56:45 2008
New Revision: 47876
URL: http://llvm.org/viewvc/llvm-project?rev=47876&view=rev
Log:
Fixed insidious state propagation bug that would sometimes cause the state
to bifurcate at the wrong places and not propagate at others.
Modified:
cfe/trunk/Analysis/GRExprEngine.cpp
cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h
Modified: cfe/trunk/Analysis/GRExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRExprEngine.cpp?rev=47876&r1=47875&r2=47876&view=diff
==============================================================================
--- cfe/trunk/Analysis/GRExprEngine.cpp (original)
+++ cfe/trunk/Analysis/GRExprEngine.cpp Mon Mar 3 18:56:45 2008
@@ -437,8 +437,10 @@
GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, ValueState* St) {
// If the state hasn't changed, don't generate a new node.
- if (St == Pred->getState())
+ if (St == Pred->getState()) {
+ Dst.Add(Pred);
return NULL;
+ }
NodeTy* N = Builder->generateNode(S, St, Pred);
Dst.Add(N);
@@ -478,11 +480,8 @@
if (AI != AE) {
- NodeSet DstTmp;
-
- Visit(*AI, Pred, DstTmp);
-
- if (DstTmp.empty()) DstTmp.Add(Pred);
+ NodeSet DstTmp;
+ Visit(*AI, Pred, DstTmp);
Expr* CurrentArg = *AI;
++AI;
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h?rev=47876&r1=47875&r2=47876&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/GRExprEngine.h Mon Mar 3 18:56:45 2008
@@ -33,15 +33,15 @@
typedef GRSwitchNodeBuilder<GRExprEngine> SwitchNodeBuilder;
class NodeSet {
- typedef llvm::SmallVector<NodeTy*,3> ImplTy;
+ typedef llvm::SmallPtrSet<NodeTy*,10> ImplTy;
ImplTy Impl;
public:
- NodeSet(NodeTy* N) { assert (N && !N->isSink()); Impl.push_back(N); }
+ NodeSet(NodeTy* N) { assert (N && !N->isSink()); Impl.insert(N); }
NodeSet() {}
- inline void Add(NodeTy* N) { if (N && !N->isSink()) Impl.push_back(N); }
+ inline void Add(NodeTy* N) { if (N && !N->isSink()) Impl.insert(N); }
typedef ImplTy::iterator iterator;
typedef ImplTy::const_iterator const_iterator;
More information about the cfe-commits
mailing list