From: Ted Kremenek Date: Tue, 6 May 2008 03:26:52 +0000 (+0000) Subject: Fixed subtle bug in the an GRAuditor object could mark a node as a sink X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=922059dec59c7bed235da01aff75ae522a369811;p=clang 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 --- 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); } }