clang 20.0.0git
|
Type-erased base class for dataflow analyses built on a single lattice type. More...
#include "clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h"
Public Member Functions | |
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 type-erased lattice element that models the initial state of a basic block. | |
virtual TypeErasedLattice | joinTypeErased (const TypeErasedLattice &, const TypeErasedLattice &)=0 |
Joins two type-erased 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 type-erased 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 type-erased 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 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. | |
Type-erased base class for dataflow analyses built on a single lattice type.
Definition at line 54 of file TypeErasedDataflowAnalysis.h.
|
inline |
Definition at line 58 of file TypeErasedDataflowAnalysis.h.
|
inline |
Definition at line 60 of file TypeErasedDataflowAnalysis.h.
|
inlinevirtual |
Definition at line 63 of file TypeErasedDataflowAnalysis.h.
|
inline |
If the built-in model is enabled, returns the options to be passed to them.
Otherwise returns empty.
Definition at line 114 of file TypeErasedDataflowAnalysis.h.
|
pure virtual |
Returns the ASTContext
that is used by the analysis.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
Returns true if and only if the two given type-erased lattice elements are equal.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
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.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
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. |
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
Applies the analysis transfer function for a given control flow graph element and type-erased lattice element.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
Returns a type-erased lattice element that models the initial state of a basic block.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.
|
pure virtual |
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.
Implemented in clang::dataflow::DataflowAnalysis< Derived, LatticeT >, clang::dataflow::DataflowAnalysis< NoopAnalysis, NoopLattice >, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, UncheckedOptionalAccessLattice >.