diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-05-06 03:26:52 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-05-06 03:26:52 +0000 |
commit | 922059dec59c7bed235da01aff75ae522a369811 (patch) | |
tree | ee90841680d64ffee4af3c3fb0a1d5aac8b39c38 /include | |
parent | 1499389d005d2d2eafd3cf8f52f56c0d54e400d6 (diff) |
Fixed subtle bug in the an GRAuditor object could mark a node as a sink
after it was already added to the destination NodeSet.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@50701 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/clang/Analysis/PathSensitive/GRCoreEngine.h | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/include/clang/Analysis/PathSensitive/GRCoreEngine.h b/include/clang/Analysis/PathSensitive/GRCoreEngine.h index bef2e2c0b6..aa8ca231b0 100644 --- a/include/clang/Analysis/PathSensitive/GRCoreEngine.h +++ b/include/clang/Analysis/PathSensitive/GRCoreEngine.h @@ -32,14 +32,14 @@ class GREndPathNodeBuilderImpl; class GRWorkList; //===----------------------------------------------------------------------===// -/// GRCoreEngineImpl - Implements the core logic of the graph-reachability analysis. -/// It traverses the CFG and generates the ExplodedGraph. Program "states" -/// are treated as opaque void pointers. The template class GRCoreEngine -/// (which subclasses GRCoreEngineImpl) provides the matching component -/// to the engine that knows the actual types for states. Note that this -/// engine only dispatches to transfer functions as the statement and -/// block-level. The analyses themselves must implement any transfer -/// function logic and the sub-expression level (if any). +/// GRCoreEngineImpl - Implements the core logic of the graph-reachability +/// analysis. It traverses the CFG and generates the ExplodedGraph. +/// Program "states" are treated as opaque void pointers. +/// The template class GRCoreEngine (which subclasses GRCoreEngineImpl) +/// provides the matching component to the engine that knows the actual types +/// for states. Note that this engine only dispatches to transfer functions +/// at the statement and block-level. The analyses themselves must implement +/// any transfer function logic and the sub-expression level (if any). class GRCoreEngineImpl { protected: friend class GRStmtNodeBuilderImpl; @@ -263,11 +263,11 @@ public: if (BuildSinks) N->markAsSink(); else { - Dst.Add(N); - for ( ; AB != AE; ++AB) if ((*AB)->Audit(N)) - N->markAsSink(); + N->markAsSink(); + + Dst.Add(N); } } |