Fixed subtle bug in the an GRAuditor object could mark a node as a sink

after it was already added to the destination NodeSet.

llvm-svn: 50701
This commit is contained in:
Ted Kremenek 2008-05-06 03:26:52 +00:00
parent 821537ecdb
commit bc51f71c5b
1 changed files with 11 additions and 11 deletions

View File

@ -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);
}
}