clang 18.0.0git

Base class template for dataflow analyses built on a single lattice type. More...
#include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
Public Types  
using  Lattice = LatticeT 
Bounded joinsemilattice that is used in the analysis.  
Public Member Functions  
DataflowAnalysis (ASTContext &Context)  
DataflowAnalysis (ASTContext &Context, DataflowAnalysisOptions Options)  
ASTContext &  getASTContext () final 
Returns the ASTContext that is used by the analysis.  
TypeErasedLattice  typeErasedInitialElement () final 
Returns a typeerased lattice element that models the initial state of a basic block.  
TypeErasedLattice  joinTypeErased (const TypeErasedLattice &E1, const TypeErasedLattice &E2) final 
Joins two typeerased lattice elements by computing their least upper bound.  
LatticeJoinEffect  widenTypeErased (TypeErasedLattice &Current, const TypeErasedLattice &Previous) final 
Chooses a lattice element that approximates the current element at a program point, given the previous element at that point.  
bool  isEqualTypeErased (const TypeErasedLattice &E1, const TypeErasedLattice &E2) final 
Returns true if and only if the two given typeerased lattice elements are equal.  
void  transferTypeErased (const CFGElement &Element, TypeErasedLattice &E, Environment &Env) final 
Applies the analysis transfer function for a given control flow graph element and typeerased lattice element.  
void  transferBranchTypeErased (bool Branch, const Stmt *Stmt, TypeErasedLattice &E, Environment &Env) final 
Applies the analysis transfer function for a given edge from a CFG block of a conditional statement.  
Public Member Functions inherited from clang::dataflow::TypeErasedDataflowAnalysis  
TypeErasedDataflowAnalysis ()  
TypeErasedDataflowAnalysis (DataflowAnalysisOptions Options)  
virtual  ~TypeErasedDataflowAnalysis () 
virtual ASTContext &  getASTContext ()=0 
Returns the ASTContext that is used by the analysis.  
virtual TypeErasedLattice  typeErasedInitialElement ()=0 
Returns a typeerased lattice element that models the initial state of a basic block.  
virtual TypeErasedLattice  joinTypeErased (const TypeErasedLattice &, const TypeErasedLattice &)=0 
Joins two typeerased lattice elements by computing their least upper bound.  
virtual LatticeJoinEffect  widenTypeErased (TypeErasedLattice &Current, const TypeErasedLattice &Previous)=0 
Chooses a lattice element that approximates the current element at a program point, given the previous element at that point.  
virtual bool  isEqualTypeErased (const TypeErasedLattice &, const TypeErasedLattice &)=0 
Returns true if and only if the two given typeerased lattice elements are equal.  
virtual void  transferTypeErased (const CFGElement &, TypeErasedLattice &, Environment &)=0 
Applies the analysis transfer function for a given control flow graph element and typeerased lattice element.  
virtual void  transferBranchTypeErased (bool Branch, const Stmt *, TypeErasedLattice &, Environment &)=0 
Applies the analysis transfer function for a given edge from a CFG block of a conditional statement.  
const std::optional< DataflowAnalysisContext::Options > &  builtinOptions () const 
If the builtin model is enabled, returns the options to be passed to them.  
Public Member Functions inherited from clang::dataflow::Environment::ValueModel  
virtual  ~ValueModel ()=default 
virtual ComparisonResult  compare (QualType Type, const Value &Val1, const Environment &Env1, const Value &Val2, const Environment &Env2) 
Returns: Same : Val1 is equivalent to Val2 , according to the model.  
virtual bool  merge (QualType Type, const Value &Val1, const Environment &Env1, const Value &Val2, const Environment &Env2, Value &MergedVal, Environment &MergedEnv) 
Modifies MergedVal to approximate both Val1 and Val2 .  
virtual Value *  widen (QualType Type, Value &Prev, const Environment &PrevEnv, Value &Current, Environment &CurrentEnv) 
This function may widen the current value – replace it with an approximation that can reach a fixed point more quickly than iterated application of the transfer function alone.  
Base class template for dataflow analyses built on a single lattice type.
Requirements:
Derived
must be derived from a specialization of this class template and must provide the following public members:
LatticeT initialElement()
 returns a lattice element that models the initial state of a basic block;void transfer(const CFGElement &, LatticeT &, Environment &)
 applies the analysis transfer function for a given CFG element and lattice element.Derived
can optionally provide the following members:
void transferBranch(bool Branch, const Stmt *Stmt, TypeErasedLattice &E, Environment &Env)
 applies the analysis transfer function for a given edge from a CFG block of a conditional statement.Derived
can optionally override the following members:
bool merge(QualType, const Value &, const Value &, Value &, Environment &)
 joins distinct values. This could be a strict lattice join or a more general widening operation.LatticeT
is a bounded joinsemilattice that is used by Derived
and must provide the following public members:
LatticeJoinEffect join(const LatticeT &)
 joins the object and the argument by computing their least upper bound, modifies the object if necessary, and returns an effect indicating whether any changes were made to it; FIXME: make it static LatticeT join(const LatticeT&, const LatticeT&)
bool operator==(const LatticeT &) const
 returns true if and only if the object is equal to the argument.LatticeT
can optionally provide the following members:
LatticeJoinEffect widen(const LatticeT &Previous)
 replaces the lattice element with an approximation that can reach a fixed point more quickly than iterated application of the transfer function alone. The previous value is provided to inform the choice of widened value. The function must also serve as a comparison operation, by indicating whether the widened value is equivalent to the previous value with the returned LatticeJoinEffect
. Definition at line 82 of file DataflowAnalysis.h.
using clang::dataflow::DataflowAnalysis< Derived, LatticeT >::Lattice = LatticeT 
Bounded joinsemilattice that is used in the analysis.
Definition at line 85 of file DataflowAnalysis.h.

inlineexplicit 
Definition at line 87 of file DataflowAnalysis.h.

inlineexplicit 
Definition at line 89 of file DataflowAnalysis.h.

inlinefinalvirtual 
Returns the ASTContext
that is used by the analysis.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 93 of file DataflowAnalysis.h.

inlinefinalvirtual 
Returns true if and only if the two given typeerased lattice elements are equal.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 115 of file DataflowAnalysis.h.

inlinefinalvirtual 
Joins two typeerased lattice elements by computing their least upper bound.
Places the join result in the left element and returns an effect indicating whether any changes were made to it.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 99 of file DataflowAnalysis.h.

inlinefinalvirtual 
Applies the analysis transfer function for a given edge from a CFG block of a conditional statement.
Stmt  The condition which is responsible for the split in the CFG. 
Branch  True if the edge goes to the basic block where the condition is true. 
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 128 of file DataflowAnalysis.h.
References Env.

inlinefinalvirtual 
Applies the analysis transfer function for a given control flow graph element and typeerased lattice element.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 122 of file DataflowAnalysis.h.
References Env, and clang::dataflow::transfer().

inlinefinalvirtual 
Returns a typeerased lattice element that models the initial state of a basic block.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 95 of file DataflowAnalysis.h.

inlinefinalvirtual 
Chooses a lattice element that approximates the current element at a program point, given the previous element at that point.
Places the widened result in the current element (Current
). Widening is optional – it is only needed to either accelerate convergence (for lattices with nontrivial height) or guarantee convergence (for lattices with infinite height).
Returns an indication of whether any changes were made to Current
in order to widen. This saves a separate call to isEqualTypeErased
after the widening.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 108 of file DataflowAnalysis.h.