clang 22.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 join-semilattice 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 type-erased lattice element that models the initial state of a basic block. | |
TypeErasedLattice | joinTypeErased (const TypeErasedLattice &E1, const TypeErasedLattice &E2) final |
Joins two type-erased 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 type-erased 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 type-erased 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 () |
const std::optional< DataflowAnalysisContext::Options > & | builtinOptions () const |
If the built-in 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 void | join (QualType Type, const Value &Val1, const Environment &Env1, const Value &Val2, const Environment &Env2, Value &JoinedVal, Environment &JoinedEnv) |
Modifies JoinedVal to approximate both Val1 and Val2. | |
virtual std::optional< WidenResult > | 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:
Derived can optionally provide the following members:
Derived can optionally override the virtual functions in the Environment::ValueModel interface (which is an indirect base class of this class).
LatticeT is a bounded join-semilattice that is used by Derived and must provide the following public members:
LatticeT can optionally provide the following members:
Definition at line 80 of file DataflowAnalysis.h.
using clang::dataflow::DataflowAnalysis< Derived, LatticeT >::Lattice = LatticeT |
Bounded join-semilattice that is used in the analysis.
Definition at line 83 of file DataflowAnalysis.h.
|
inlineexplicit |
Definition at line 85 of file DataflowAnalysis.h.
|
inlineexplicit |
Definition at line 87 of file DataflowAnalysis.h.
References clang::dataflow::TypeErasedDataflowAnalysis::TypeErasedDataflowAnalysis().
|
inlinefinalvirtual |
Returns the ASTContext that is used by the analysis.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 91 of file DataflowAnalysis.h.
|
inlinefinalvirtual |
Returns true if and only if the two given type-erased lattice elements are equal.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 113 of file DataflowAnalysis.h.
|
inlinefinalvirtual |
Joins two type-erased 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 97 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 126 of file DataflowAnalysis.h.
|
inlinefinalvirtual |
Applies the analysis transfer function for a given control flow graph element and type-erased lattice element.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 120 of file DataflowAnalysis.h.
References clang::dataflow::transfer().
|
inlinefinalvirtual |
Returns a type-erased lattice element that models the initial state of a basic block.
Implements clang::dataflow::TypeErasedDataflowAnalysis.
Definition at line 93 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 non-trivial 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 106 of file DataflowAnalysis.h.