clang  15.0.0git
Classes | Typedefs | Enumerations | Functions | Variables
clang::dataflow Namespace Reference

Dataflow Directional Tag Classes. More...

Classes

class  AggregateStorageLocation
 A storage location which is subdivided into smaller storage locations that can be traced independently by abstract interpretation. More...
 
class  AtomicBoolValue
 Models an atomic boolean. More...
 
struct  backward_analysis_tag
 
struct  BooleanFormula
 A boolean formula in conjunctive normal form. More...
 
class  BoolValue
 Models a boolean. More...
 
class  ChromiumCheckModel
 Models the behavior of Chromium's CHECK, DCHECK, etc. More...
 
class  ConjunctionValue
 Models a boolean conjunction. More...
 
class  ControlFlowContext
 Holds CFG and other derived context that is needed to perform dataflow analysis. More...
 
class  DataflowAnalysis
 Base class template for dataflow analyses built on a single lattice type. More...
 
class  DataflowAnalysisContext
 Owns objects that encompass the state of a program and stores context that is used during dataflow analysis. More...
 
struct  DataflowAnalysisState
 
class  DataflowModel
 Abstract base class for dataflow "models": reusable analysis components that model a particular aspect of program semantics in the Environment. More...
 
class  DisjunctionValue
 Models a boolean disjunction. More...
 
class  Environment
 Holds the state of the program (store and heap) at a given program point. More...
 
struct  forward_analysis_tag
 
class  IndirectionValue
 Base class for values that refer to storage locations. More...
 
class  IntegerValue
 Models an integer. More...
 
class  MapLattice
 A lattice that maps keys to individual lattice elements. More...
 
class  MatchSwitchBuilder
 Collects cases of a "match switch": a collection of matchers paired with callbacks, which together define a switch that can be applied to a Stmt. More...
 
class  NegationValue
 Models a boolean negation. More...
 
class  PointerValue
 Models a symbolic pointer. Specifically, any value of type T*. More...
 
class  ReferenceValue
 Models a dereferenced pointer. More...
 
class  ScalarStorageLocation
 A storage location that is not subdivided further for the purposes of abstract interpretation. More...
 
class  Solver
 An interface for a SAT solver that can be used by dataflow analyses. More...
 
class  SourceLocationsLattice
 Lattice for dataflow analysis that keeps track of a set of source locations. More...
 
class  StmtToEnvMap
 Maps statements to the environments of basic blocks that contain them. More...
 
class  StmtToEnvMapImpl
 
class  StorageLocation
 Base class for elements of the local variable store and of the heap. More...
 
class  StructValue
 Models a value of struct or class type, with a flat map of fields to child storage locations, containing all accessible members of base struct and class types. More...
 
class  TerminatorVisitor
 Extends the flow condition of an environment based on a terminator statement. More...
 
struct  TransferState
 A common form of state shared between the cases of a transfer function. More...
 
class  TransferVisitor
 
class  TypeErasedDataflowAnalysis
 Type-erased base class for dataflow analyses built on a single lattice type. More...
 
struct  TypeErasedDataflowAnalysisState
 Type-erased model of the program at a given program point. More...
 
struct  TypeErasedLattice
 Type-erased lattice element container. More...
 
class  UncheckedOptionalAccessModel
 Dataflow analysis that discovers unsafe accesses of optional values and adds the respective source locations to the lattice. More...
 
struct  UncheckedOptionalAccessModelOptions
 
class  Value
 Base class for all values computed by abstract interpretation. More...
 
class  WatchedLiteralsSolver
 A SAT solver that is an implementation of Algorithm D from Knuth's The Art of Computer Programming Volume 4: Satisfiability, Fascicle 6. More...
 
class  WatchedLiteralsSolverImpl
 

Typedefs

template<typename ElementLattice >
using VarMapLattice = MapLattice< const clang::VarDecl *, ElementLattice >
 Convenience alias that captures the common use of map lattices to model in-scope variables. More...
 
template<typename State >
using MatchSwitch = std::function< void(const Stmt &, ASTContext &, State &)>
 Matches against Stmt and, based on its structure, dispatches to an appropriate handler. More...
 
using Variable = uint32_t
 Boolean variables are represented as positive integers. More...
 
using Literal = uint32_t
 Literals are represented as positive integers. More...
 
using ClauseID = uint32_t
 Clause identifiers are represented as positive integers. More...
 

Enumerations

enum  SkipPast { SkipPast::None, SkipPast::Reference, SkipPast::ReferenceThenPointer }
 Indicates what kind of indirections should be skipped past when retrieving storage locations or values. More...
 
enum  LatticeJoinEffect { LatticeJoinEffect::Unchanged, LatticeJoinEffect::Changed }
 Effect indicating whether a lattice join operation resulted in a new value. More...
 

Functions

template<typename AnalysisT >
llvm::Expected< std::vector< llvm::Optional< DataflowAnalysisState< typename AnalysisT::Lattice > > > > runDataflowAnalysis (const ControlFlowContext &CFCtx, AnalysisT &Analysis, const Environment &InitEnv)
 Performs dataflow analysis and returns a mapping from basic block IDs to dataflow analysis states that model the respective basic blocks. More...
 
const ExprignoreCFGOmittedNodes (const Expr &E)
 Skip past nodes that the CFG does not emit. More...
 
const StmtignoreCFGOmittedNodes (const Stmt &S)
 
template<typename Key , typename ElementLattice >
std::ostream & operator<< (std::ostream &Os, const clang::dataflow::MapLattice< Key, ElementLattice > &M)
 
template<typename ElementLattice >
std::ostream & operator<< (std::ostream &Os, const clang::dataflow::VarMapLattice< ElementLattice > &M)
 
std::string DebugString (const SourceLocationsLattice &Lattice, const ASTContext &Context)
 Returns a string that represents the source locations of the lattice. More...
 
void transfer (const StmtToEnvMap &StmtToEnv, const Stmt &S, Environment &Env)
 Evaluates S and updates Env accordingly. More...
 
TypeErasedDataflowAnalysisState transferBlock (const ControlFlowContext &CFCtx, std::vector< llvm::Optional< TypeErasedDataflowAnalysisState >> &BlockStates, const CFGBlock &Block, const Environment &InitEnv, TypeErasedDataflowAnalysis &Analysis, std::function< void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)> HandleTransferredStmt=nullptr)
 Transfers the state of a basic block by evaluating each of its statements in the context of Analysis and the states of its predecessors that are available in BlockStates. More...
 
llvm::Expected< std::vector< llvm::Optional< TypeErasedDataflowAnalysisState > > > runTypeErasedDataflowAnalysis (const ControlFlowContext &CFCtx, TypeErasedDataflowAnalysis &Analysis, const Environment &InitEnv)
 Performs dataflow analysis and returns a mapping from basic block IDs to dataflow analysis states that model the respective basic blocks. More...
 
static llvm::DenseMap< const Stmt *, const CFGBlock * > buildStmtToBasicBlockMap (const CFG &Cfg)
 Returns a map from statements to basic blocks that contain them. More...
 
static std::pair< BoolValue *, BoolValue * > makeCanonicalBoolValuePair (BoolValue &LHS, BoolValue &RHS)
 
template<typename K , typename V >
llvm::DenseMap< K, VintersectDenseMaps (const llvm::DenseMap< K, V > &Map1, const llvm::DenseMap< K, V > &Map2)
 Returns a map consisting of key-value entries that are present in both maps. More...
 
static bool equivalentValues (QualType Type, Value *Val1, const Environment &Env1, Value *Val2, const Environment &Env2, Environment::ValueModel &Model)
 Returns true if and only if Val1 is equivalent to Val2. More...
 
static ValuemergeDistinctValues (QualType Type, Value *Val1, const Environment &Env1, Value *Val2, const Environment &Env2, Environment &MergedEnv, Environment::ValueModel &Model)
 Attempts to merge distinct values Val1 and Val2 in Env1 and Env2, respectively, of the same type Type. More...
 
static void initGlobalVar (const VarDecl &D, Environment &Env)
 Initializes a global storage value. More...
 
static void initGlobalVar (const Decl &D, Environment &Env)
 Initializes a global storage value. More...
 
static void initGlobalVars (const Stmt &S, Environment &Env)
 Initializes global storage values that are declared or referenced from sub-statements of S. More...
 
static void getFieldsFromClassHierarchy (QualType Type, bool IgnorePrivateFields, llvm::DenseSet< const FieldDecl * > &Fields)
 
static llvm::DenseSet< const FieldDecl * > getAccessibleObjectFields (QualType Type)
 Gets the set of all fields accesible from the type. More...
 
bool isCheckLikeMethod (llvm::SmallDenseSet< const CXXMethodDecl * > &CheckDecls, const CXXMethodDecl &D)
 Determines whether D is one of the methods used to implement Chromium's CHECK macros. More...
 
static BoolValueevaluateBooleanEquality (const Expr &LHS, const Expr &RHS, Environment &Env)
 
static int blockIndexInPredecessor (const CFGBlock &Pred, const CFGBlock &Block)
 Returns the index of Block in the successors of Pred. More...
 
static TypeErasedDataflowAnalysisState computeBlockInputState (const ControlFlowContext &CFCtx, std::vector< llvm::Optional< TypeErasedDataflowAnalysisState >> &BlockStates, const CFGBlock &Block, const Environment &InitEnv, TypeErasedDataflowAnalysis &Analysis)
 Computes the input state for a given basic block by joining the output states of its predecessors. More...
 
static void transferCFGStmt (const ControlFlowContext &CFCtx, llvm::ArrayRef< llvm::Optional< TypeErasedDataflowAnalysisState >> BlockStates, const CFGStmt &CfgStmt, TypeErasedDataflowAnalysis &Analysis, TypeErasedDataflowAnalysisState &State, std::function< void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)> HandleTransferredStmt)
 Transfers State by evaluating CfgStmt in the context of Analysis. More...
 
static void transferCFGInitializer (const CFGInitializer &CfgInit, TypeErasedDataflowAnalysisState &State)
 Transfers State by evaluating CfgInit. More...
 
static constexpr Literal posLit (Variable V)
 Returns the positive literal V. More...
 
static constexpr Literal negLit (Variable V)
 Returns the negative literal !V. More...
 
static constexpr Literal notLit (Literal L)
 Returns the negated literal !L. More...
 
static constexpr Variable var (Literal L)
 Returns the variable of L. More...
 
BooleanFormula buildBooleanFormula (const llvm::DenseSet< BoolValue * > &Vals)
 Converts the conjunction of Vals into a formula in conjunctive normal form where each clause has at least one and at most three literals. More...
 

Variables

static constexpr int MaxCompositeValueDepth = 3
 
static constexpr int MaxCompositeValueSize = 1000
 
static constexpr Variable NullVar = 0
 A null boolean variable is used as a placeholder in various data structures and algorithms. More...
 
static constexpr Literal NullLit = 0
 A null literal is used as a placeholder in various data structures and algorithms. More...
 
static constexpr ClauseID NullClause = 0
 A null clause identifier is used as a placeholder in various data structures and algorithms. More...
 

Detailed Description

Dataflow Directional Tag Classes.

These are used for tag dispatching within the dataflow solver/transfer functions to determine what direction a dataflow analysis flows.

Typedef Documentation

◆ ClauseID

using clang::dataflow::ClauseID = typedef uint32_t

Clause identifiers are represented as positive integers.

Definition at line 74 of file WatchedLiteralsSolver.cpp.

◆ Literal

using clang::dataflow::Literal = typedef uint32_t

Literals are represented as positive integers.

Specifically, for a boolean variable V that is represented as the positive integer I, the positive literal V is represented as the integer 2*I and the negative literal !V is represented as the integer 2*I+1.

Definition at line 55 of file WatchedLiteralsSolver.cpp.

◆ MatchSwitch

template<typename State >
using clang::dataflow::MatchSwitch = typedef std::function<void(const Stmt &, ASTContext &, State &)>

Matches against Stmt and, based on its structure, dispatches to an appropriate handler.

Definition at line 50 of file MatchSwitch.h.

◆ Variable

using clang::dataflow::Variable = typedef uint32_t

Boolean variables are represented as positive integers.

Definition at line 45 of file WatchedLiteralsSolver.cpp.

◆ VarMapLattice

template<typename ElementLattice >
using clang::dataflow::VarMapLattice = typedef MapLattice<const clang::VarDecl *, ElementLattice>

Convenience alias that captures the common use of map lattices to model in-scope variables.

Definition at line 109 of file MapLattice.h.

Enumeration Type Documentation

◆ LatticeJoinEffect

Effect indicating whether a lattice join operation resulted in a new value.

Enumerator
Unchanged 
Changed 

Definition at line 21 of file DataflowLattice.h.

◆ SkipPast

Indicates what kind of indirections should be skipped past when retrieving storage locations or values.

FIXME: Consider renaming this or replacing it with a more appropriate model. See the discussion in https://reviews.llvm.org/D116596 for context.

Enumerator
None 

No indirections should be skipped past.

Reference 

An optional reference should be skipped past.

ReferenceThenPointer 

An optional reference should be skipped past, then an optional pointer should be skipped past.

Definition at line 41 of file DataflowEnvironment.h.

Function Documentation

◆ blockIndexInPredecessor()

static int clang::dataflow::blockIndexInPredecessor ( const CFGBlock Pred,
const CFGBlock Block 
)
static

Returns the index of Block in the successors of Pred.

Definition at line 62 of file TypeErasedDataflowAnalysis.cpp.

References clang::Block, clang::CFGBlock::succ_begin(), and clang::CFGBlock::succs().

Referenced by computeBlockInputState().

◆ buildBooleanFormula()

BooleanFormula clang::dataflow::buildBooleanFormula ( const llvm::DenseSet< BoolValue * > &  Vals)

Converts the conjunction of Vals into a formula in conjunctive normal form where each clause has at least one and at most three literals.

Definition at line 174 of file WatchedLiteralsSolver.cpp.

References clang::dataflow::BooleanFormula::addClause(), negLit(), and posLit().

◆ buildStmtToBasicBlockMap()

static llvm::DenseMap<const Stmt *, const CFGBlock *> clang::dataflow::buildStmtToBasicBlockMap ( const CFG Cfg)
static

Returns a map from statements to basic blocks that contain them.

Definition at line 28 of file ControlFlowContext.cpp.

References clang::Block.

◆ computeBlockInputState()

static TypeErasedDataflowAnalysisState clang::dataflow::computeBlockInputState ( const ControlFlowContext CFCtx,
std::vector< llvm::Optional< TypeErasedDataflowAnalysisState >> &  BlockStates,
const CFGBlock Block,
const Environment InitEnv,
TypeErasedDataflowAnalysis Analysis 
)
static

Computes the input state for a given basic block by joining the output states of its predecessors.

Requirements:

All predecessors of Block except those with loop back edges must have already been transferred. States in BlockStates that are set to llvm::None represent basic blocks that are not evaluated yet.

Definition at line 150 of file TypeErasedDataflowAnalysis.cpp.

References clang::dataflow::TypeErasedDataflowAnalysis::applyBuiltinTransfer(), clang::Block, blockIndexInPredecessor(), clang::dataflow::TypeErasedDataflowAnalysisState::Env, clang::dataflow::ControlFlowContext::getStmtToBlock(), clang::dataflow::TypeErasedDataflowAnalysis::joinTypeErased(), clang::dataflow::TypeErasedDataflowAnalysisState::Lattice, clang::dataflow::TypeErasedDataflowAnalysis::typeErasedInitialElement(), and clang::StmtVisitorBase< Ptr, ImplClass, RetTy, ParamTys >::Visit().

Referenced by transferBlock().

◆ DebugString()

std::string clang::dataflow::DebugString ( const SourceLocationsLattice Lattice,
const ASTContext Context 
)

Returns a string that represents the source locations of the lattice.

Definition at line 33 of file SourceLocationsLattice.cpp.

References clang::dataflow::SourceLocationsLattice::getSourceLocations(), and string().

◆ equivalentValues()

static bool clang::dataflow::equivalentValues ( QualType  Type,
Value Val1,
const Environment Env1,
Value Val2,
const Environment Env2,
Environment::ValueModel Model 
)
static

Returns true if and only if Val1 is equivalent to Val2.

Definition at line 54 of file DataflowEnvironment.cpp.

References clang::dataflow::Environment::ValueModel::compareEquivalent().

Referenced by clang::dataflow::Environment::equivalentTo().

◆ evaluateBooleanEquality()

static BoolValue& clang::dataflow::evaluateBooleanEquality ( const Expr LHS,
const Expr RHS,
Environment Env 
)
static

◆ getAccessibleObjectFields()

static llvm::DenseSet<const FieldDecl *> clang::dataflow::getAccessibleObjectFields ( QualType  Type)
static

Gets the set of all fields accesible from the type.

FIXME: Does not precisely handle non-virtual diamond inheritance. A single field decl will be modeled for all instances of the inherited field.

Definition at line 180 of file DataflowEnvironment.cpp.

References getFieldsFromClassHierarchy().

Referenced by clang::dataflow::Environment::createStorageLocation(), and clang::dataflow::Environment::setValue().

◆ getFieldsFromClassHierarchy()

static void clang::dataflow::getFieldsFromClassHierarchy ( QualType  Type,
bool  IgnorePrivateFields,
llvm::DenseSet< const FieldDecl * > &  Fields 
)
static

◆ ignoreCFGOmittedNodes() [1/2]

const Expr & clang::dataflow::ignoreCFGOmittedNodes ( const Expr E)

Skip past nodes that the CFG does not emit.

These nodes are invisible to flow-sensitive analysis, and should be ignored as they will effectively not exist.

  • ParenExpr - The CFG takes the operator precedence into account, but otherwise omits the node afterwards.
  • ExprWithCleanups - The CFG will generate the appropriate calls to destructors and then omit the node.

Definition at line 162 of file DataflowAnalysisContext.cpp.

Referenced by clang::dataflow::DataflowAnalysisContext::getStorageLocation(), clang::dataflow::Environment::getStorageLocation(), clang::dataflow::DataflowAnalysisContext::setStorageLocation(), and clang::dataflow::Environment::setStorageLocation().

◆ ignoreCFGOmittedNodes() [2/2]

const Stmt & clang::dataflow::ignoreCFGOmittedNodes ( const Stmt S)

Definition at line 173 of file DataflowAnalysisContext.cpp.

◆ initGlobalVar() [1/2]

static void clang::dataflow::initGlobalVar ( const Decl D,
Environment Env 
)
static

Initializes a global storage value.

Definition at line 122 of file DataflowEnvironment.cpp.

References initGlobalVar(), and V.

◆ initGlobalVar() [2/2]

static void clang::dataflow::initGlobalVar ( const VarDecl D,
Environment Env 
)
static

◆ initGlobalVars()

static void clang::dataflow::initGlobalVars ( const Stmt S,
Environment Env 
)
static

Initializes global storage values that are declared or referenced from sub-statements of S.

Definition at line 131 of file DataflowEnvironment.cpp.

Referenced by clang::dataflow::Environment::Environment().

◆ intersectDenseMaps()

template<typename K , typename V >
llvm::DenseMap<K, V> clang::dataflow::intersectDenseMaps ( const llvm::DenseMap< K, V > &  Map1,
const llvm::DenseMap< K, V > &  Map2 
)

Returns a map consisting of key-value entries that are present in both maps.

Definition at line 42 of file DataflowEnvironment.cpp.

Referenced by clang::dataflow::Environment::join().

◆ isCheckLikeMethod()

bool clang::dataflow::isCheckLikeMethod ( llvm::SmallDenseSet< const CXXMethodDecl * > &  CheckDecls,
const CXXMethodDecl D 
)

◆ makeCanonicalBoolValuePair()

static std::pair<BoolValue *, BoolValue *> clang::dataflow::makeCanonicalBoolValuePair ( BoolValue LHS,
BoolValue RHS 
)
static

◆ mergeDistinctValues()

static Value* clang::dataflow::mergeDistinctValues ( QualType  Type,
Value Val1,
const Environment Env1,
Value Val2,
const Environment Env2,
Environment MergedEnv,
Environment::ValueModel Model 
)
static

Attempts to merge distinct values Val1 and Val2 in Env1 and Env2, respectively, of the same type Type.

Merging generally produces a single value that (soundly) approximates the two inputs, although the actual meaning depends on Model.

Definition at line 75 of file DataflowEnvironment.cpp.

References clang::dataflow::Environment::createValue(), clang::dataflow::Environment::getFlowConditionToken(), clang::dataflow::Environment::makeAnd(), clang::dataflow::Environment::makeOr(), and clang::dataflow::Environment::ValueModel::merge().

Referenced by clang::dataflow::Environment::join().

◆ negLit()

static constexpr Literal clang::dataflow::negLit ( Variable  V)
staticconstexpr

◆ notLit()

static constexpr Literal clang::dataflow::notLit ( Literal  L)
staticconstexpr

Returns the negated literal !L.

Definition at line 68 of file WatchedLiteralsSolver.cpp.

◆ operator<<() [1/2]

template<typename Key , typename ElementLattice >
std::ostream& clang::dataflow::operator<< ( std::ostream &  Os,
const clang::dataflow::MapLattice< Key, ElementLattice > &  M 
)

Definition at line 113 of file MapLattice.h.

References string().

◆ operator<<() [2/2]

template<typename ElementLattice >
std::ostream& clang::dataflow::operator<< ( std::ostream &  Os,
const clang::dataflow::VarMapLattice< ElementLattice > &  M 
)

Definition at line 126 of file MapLattice.h.

References string().

◆ posLit()

static constexpr Literal clang::dataflow::posLit ( Variable  V)
staticconstexpr

◆ runDataflowAnalysis()

template<typename AnalysisT >
llvm::Expected<std::vector< llvm::Optional<DataflowAnalysisState<typename AnalysisT::Lattice> > > > clang::dataflow::runDataflowAnalysis ( const ControlFlowContext CFCtx,
AnalysisT &  Analysis,
const Environment InitEnv 
)

Performs dataflow analysis and returns a mapping from basic block IDs to dataflow analysis states that model the respective basic blocks.

The returned vector, if any, will have the same size as the number of CFG blocks, with indices corresponding to basic block IDs. Returns an error if the dataflow analysis cannot be performed successfully.

Definition at line 116 of file DataflowAnalysis.h.

References runTypeErasedDataflowAnalysis(), and State.

◆ runTypeErasedDataflowAnalysis()

llvm::Expected< std::vector< llvm::Optional< TypeErasedDataflowAnalysisState > > > clang::dataflow::runTypeErasedDataflowAnalysis ( const ControlFlowContext CFCtx,
TypeErasedDataflowAnalysis Analysis,
const Environment InitEnv 
)

◆ transfer()

void clang::dataflow::transfer ( const StmtToEnvMap StmtToEnv,
const Stmt S,
Environment Env 
)

Evaluates S and updates Env accordingly.

Requirements:

S must not be ParenExpr or ExprWithCleanups.

Definition at line 596 of file Transfer.cpp.

Referenced by clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, SourceLocationsLattice >::transferTypeErased().

◆ transferBlock()

TypeErasedDataflowAnalysisState clang::dataflow::transferBlock ( const ControlFlowContext CFCtx,
std::vector< llvm::Optional< TypeErasedDataflowAnalysisState >> &  BlockStates,
const CFGBlock Block,
const Environment InitEnv,
TypeErasedDataflowAnalysis Analysis,
std::function< void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)>  HandleTransferredStmt = nullptr 
)

Transfers the state of a basic block by evaluating each of its statements in the context of Analysis and the states of its predecessors that are available in BlockStates.

HandleTransferredStmt (if provided) will be applied to each statement in the block, after it is evaluated.

Requirements:

All predecessors of Block except those with loop back edges must have already been transferred. States in BlockStates that are set to llvm::None represent basic blocks that are not evaluated yet.

Definition at line 285 of file TypeErasedDataflowAnalysis.cpp.

References clang::dataflow::TypeErasedDataflowAnalysis::applyBuiltinTransfer(), clang::Block, computeBlockInputState(), clang::CFGElement::Initializer, State, clang::CFGElement::Statement, transferCFGInitializer(), and transferCFGStmt().

Referenced by runTypeErasedDataflowAnalysis().

◆ transferCFGInitializer()

static void clang::dataflow::transferCFGInitializer ( const CFGInitializer CfgInit,
TypeErasedDataflowAnalysisState State 
)
static

Transfers State by evaluating CfgInit.

Definition at line 251 of file TypeErasedDataflowAnalysis.cpp.

References clang::CFGInitializer::getInitializer(), clang::Initializer, clang::Member, Reference, and State.

Referenced by transferBlock().

◆ transferCFGStmt()

static void clang::dataflow::transferCFGStmt ( const ControlFlowContext CFCtx,
llvm::ArrayRef< llvm::Optional< TypeErasedDataflowAnalysisState >>  BlockStates,
const CFGStmt CfgStmt,
TypeErasedDataflowAnalysis Analysis,
TypeErasedDataflowAnalysisState State,
std::function< void(const CFGStmt &, const TypeErasedDataflowAnalysisState &)>  HandleTransferredStmt 
)
static

Transfers State by evaluating CfgStmt in the context of Analysis.

HandleTransferredStmt (if provided) will be applied to CfgStmt, after it is evaluated.

Definition at line 231 of file TypeErasedDataflowAnalysis.cpp.

Referenced by transferBlock().

◆ var()

static constexpr Variable clang::dataflow::var ( Literal  L)
staticconstexpr

Variable Documentation

◆ MaxCompositeValueDepth

constexpr int clang::dataflow::MaxCompositeValueDepth = 3
staticconstexpr

Definition at line 37 of file DataflowEnvironment.cpp.

◆ MaxCompositeValueSize

constexpr int clang::dataflow::MaxCompositeValueSize = 1000
staticconstexpr

Definition at line 38 of file DataflowEnvironment.cpp.

Referenced by clang::dataflow::Environment::createValue().

◆ NullClause

constexpr ClauseID clang::dataflow::NullClause = 0
staticconstexpr

A null clause identifier is used as a placeholder in various data structures and algorithms.

Definition at line 78 of file WatchedLiteralsSolver.cpp.

◆ NullLit

constexpr Literal clang::dataflow::NullLit = 0
staticconstexpr

A null literal is used as a placeholder in various data structures and algorithms.

Definition at line 59 of file WatchedLiteralsSolver.cpp.

Referenced by clang::dataflow::BooleanFormula::addClause().

◆ NullVar

constexpr Variable clang::dataflow::NullVar = 0
staticconstexpr

A null boolean variable is used as a placeholder in various data structures and algorithms.

Definition at line 49 of file WatchedLiteralsSolver.cpp.

Referenced by clang::dataflow::WatchedLiteralsSolverImpl::WatchedLiteralsSolverImpl().