clang 20.0.0git
|
Dataflow analysis that models whether optionals hold values or not. More...
#include "clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h"
Public Member Functions | |
UncheckedOptionalAccessModel (ASTContext &Ctx, dataflow::Environment &Env) | |
void | transfer (const CFGElement &Elt, NoopLattice &L, Environment &Env) |
Public Member Functions inherited from clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, NoopLattice > | |
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 () |
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. | |
Static Public Member Functions | |
static ast_matchers::DeclarationMatcher | optionalClassDecl () |
Returns a matcher for the optional classes covered by this model. | |
static NoopLattice | initialElement () |
Additional Inherited Members | |
Public Types inherited from clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, NoopLattice > | |
using | Lattice = NoopLattice |
Bounded join-semilattice that is used in the analysis. | |
Dataflow analysis that models whether optionals hold values or not.
Models the std::optional
, absl::optional
, and base::Optional
types.
Definition at line 45 of file UncheckedOptionalAccessModel.h.
clang::dataflow::UncheckedOptionalAccessModel::UncheckedOptionalAccessModel | ( | ASTContext & | Ctx, |
dataflow::Environment & | Env | ||
) |
Definition at line 918 of file UncheckedOptionalAccessModel.cpp.
References clang::ASTContext::BoolTy, Env, clang::Type::getAsCXXRecordDecl(), clang::dataflow::getOptionalBaseClass(), and clang::Optional.
|
inlinestatic |
Definition at line 53 of file UncheckedOptionalAccessModel.h.
|
static |
Returns a matcher for the optional classes covered by this model.
Definition at line 914 of file UncheckedOptionalAccessModel.cpp.
References clang::ast_matchers::cxxRecordDecl.
void clang::dataflow::UncheckedOptionalAccessModel::transfer | ( | const CFGElement & | Elt, |
NoopLattice & | L, | ||
Environment & | Env | ||
) |
Definition at line 933 of file UncheckedOptionalAccessModel.cpp.
References Env, and clang::dataflow::DataflowAnalysis< UncheckedOptionalAccessModel, NoopLattice >::getASTContext().