diff options
Diffstat (limited to 'include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h')
| -rw-r--r-- | include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h b/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h index cfb1b921e9a42..bacb42dd176fd 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h @@ -32,6 +32,7 @@ #include "llvm/Support/Allocator.h" #include "llvm/Support/Casting.h" #include <memory> +#include <utility> #include <vector> namespace clang { @@ -121,10 +122,9 @@ class ExplodedNode : public llvm::FoldingSetNode { NodeGroup Succs; public: - explicit ExplodedNode(const ProgramPoint &loc, ProgramStateRef state, bool IsSink) - : Location(loc), State(state), Succs(IsSink) { + : Location(loc), State(std::move(state)), Succs(IsSink) { assert(isSink() == IsSink); } @@ -295,6 +295,14 @@ public: bool IsSink = false, bool* IsNew = nullptr); + /// \brief Create a node for a (Location, State) pair, + /// but don't store it for deduplication later. This + /// is useful when copying an already completed + /// ExplodedGraph for further processing. + ExplodedNode *createUncachedNode(const ProgramPoint &L, + ProgramStateRef State, + bool IsSink = false); + std::unique_ptr<ExplodedGraph> MakeEmptyGraph() const { return llvm::make_unique<ExplodedGraph>(); } @@ -321,6 +329,8 @@ public: bool empty() const { return NumNodes == 0; } unsigned size() const { return NumNodes; } + void reserve(unsigned NodeCount) { Nodes.reserve(NodeCount); } + // Iterators. typedef ExplodedNode NodeTy; typedef llvm::FoldingSet<ExplodedNode> AllNodesTy; |
