class NodeBuilder

Declaration

class NodeBuilder { /* full declaration omitted */ };

Description

This is the simplest builder which generates nodes in the ExplodedGraph. The main benefit of the builder is that it automatically tracks the frontier nodes (or destination set). This is the set of nodes which should be propagated to the next step / builder. They are the nodes which have been added to the builder (either as the input node set or as the newly constructed nodes) but did not have any outgoing transitions added.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:241

Member Variables

protected const clang::ento::NodeBuilderContext& C
protected bool Finalized
Specifies if the builder results have been finalized. For example, if it is set to false, autotransitions are yet to be generated.
protected bool HasGeneratedNodes = false
protected clang::ento::ExplodedNodeSet& Frontier
The frontier set - a set of nodes which need to be propagated after the builder dies.

Method Overview

  • public NodeBuilder(clang::ento::ExplodedNode * SrcNode, clang::ento::ExplodedNodeSet & DstSet, const clang::ento::NodeBuilderContext & Ctx, bool F = true)
  • public NodeBuilder(const clang::ento::ExplodedNodeSet & SrcSet, clang::ento::ExplodedNodeSet & DstSet, const clang::ento::NodeBuilderContext & Ctx, bool F = true)
  • public void addNodes(clang::ento::ExplodedNode * N)
  • public void addNodes(const clang::ento::ExplodedNodeSet & S)
  • private virtual void anchor()
  • public clang::ento::NodeBuilder::iterator begin()
  • protected virtual bool checkResults()
  • public clang::ento::NodeBuilder::iterator end()
  • protected virtual void finalizeResults()
  • public clang::ento::ExplodedNode * generateNode(const clang::ProgramPoint & PP, clang::ento::ProgramStateRef State, clang::ento::ExplodedNode * Pred)
  • protected clang::ento::ExplodedNode * generateNodeImpl(const clang::ProgramPoint & PP, clang::ento::ProgramStateRef State, clang::ento::ExplodedNode * Pred, bool MarkAsSink = false)
  • public clang::ento::ExplodedNode * generateSink(const clang::ProgramPoint & PP, clang::ento::ProgramStateRef State, clang::ento::ExplodedNode * Pred)
  • public const clang::ento::NodeBuilderContext & getContext()
  • public const clang::ento::ExplodedNodeSet & getResults()
  • public bool hasGeneratedNodes()
  • protected bool hasNoSinksInFrontier()
  • public void takeNodes(const clang::ento::ExplodedNodeSet & S)
  • public void takeNodes(clang::ento::ExplodedNode * N)
  • public virtual ~NodeBuilder()

Methods

NodeBuilder(
    clang::ento::ExplodedNode* SrcNode,
    clang::ento::ExplodedNodeSet& DstSet,
    const clang::ento::NodeBuilderContext& Ctx,
    bool F = true)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:278

Parameters

clang::ento::ExplodedNode* SrcNode
clang::ento::ExplodedNodeSet& DstSet
const clang::ento::NodeBuilderContext& Ctx
bool F = true

NodeBuilder(
    const clang::ento::ExplodedNodeSet& SrcSet,
    clang::ento::ExplodedNodeSet& DstSet,
    const clang::ento::NodeBuilderContext& Ctx,
    bool F = true)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:284

Parameters

const clang::ento::ExplodedNodeSet& SrcSet
clang::ento::ExplodedNodeSet& DstSet
const clang::ento::NodeBuilderContext& Ctx
bool F = true

void addNodes(clang::ento::ExplodedNode* N)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:343

Parameters

clang::ento::ExplodedNode* N

void addNodes(
    const clang::ento::ExplodedNodeSet& S)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:342

Parameters

const clang::ento::ExplodedNodeSet& S

virtual void anchor()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:242

clang::ento::NodeBuilder::iterator begin()

Description

Iterators through the results frontier.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:322

virtual bool checkResults()

Description

Checks if the results are ready.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:258

clang::ento::NodeBuilder::iterator end()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:328

virtual void finalizeResults()

Description

Allow subclasses to finalize results before result_begin() is executed.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:270

clang::ento::ExplodedNode* generateNode(
    const clang::ProgramPoint& PP,
    clang::ento::ProgramStateRef State,
    clang::ento::ExplodedNode* Pred)

Description

Generates a node in the ExplodedGraph.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:294

Parameters

const clang::ProgramPoint& PP
clang::ento::ProgramStateRef State
clang::ento::ExplodedNode* Pred

clang::ento::ExplodedNode* generateNodeImpl(
    const clang::ProgramPoint& PP,
    clang::ento::ProgramStateRef State,
    clang::ento::ExplodedNode* Pred,
    bool MarkAsSink = false)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:272

Parameters

const clang::ProgramPoint& PP
clang::ento::ProgramStateRef State
clang::ento::ExplodedNode* Pred
bool MarkAsSink = false

clang::ento::ExplodedNode* generateSink(
    const clang::ProgramPoint& PP,
    clang::ento::ProgramStateRef State,
    clang::ento::ExplodedNode* Pred)

Description

Generates a sink in the ExplodedGraph. When a node is marked as sink, the exploration from the node is stopped - the node becomes the last node on the path and certain kinds of bugs are suppressed.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:307

Parameters

const clang::ProgramPoint& PP
clang::ento::ProgramStateRef State
clang::ento::ExplodedNode* Pred

const clang::ento::NodeBuilderContext&
getContext()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:333

const clang::ento::ExplodedNodeSet& getResults()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:313

bool hasGeneratedNodes()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:334

bool hasNoSinksInFrontier()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:262

void takeNodes(
    const clang::ento::ExplodedNodeSet& S)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:336

Parameters

const clang::ento::ExplodedNodeSet& S

void takeNodes(clang::ento::ExplodedNode* N)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:341

Parameters

clang::ento::ExplodedNode* N

virtual ~NodeBuilder()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h:291