class UncheckedOptionalAccessModel
Declaration
class UncheckedOptionalAccessModel : public DataflowAnalysis { /* full declaration omitted */ };
Description
Dataflow analysis that models whether optionals hold values or not. Models the `std::optional`, `absl::optional`, and `base::Optional` types.
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:44
Inherits from: DataflowAnalysis
Member Variables
- private MatchSwitch< TransferState<clang::dataflow::NoopLattice>> TransferMatchSwitch
Method Overview
- public UncheckedOptionalAccessModel(clang::ASTContext & AstContext, clang::dataflow::UncheckedOptionalAccessModelOptions Options = {})
- public bool compareEquivalent(clang::QualType Type, const clang::dataflow::Value & Val1, const clang::dataflow::Environment & Env1, const clang::dataflow::Value & Val2, const clang::dataflow::Environment & Env2)
- public static clang::dataflow::NoopLattice initialElement()
- public bool merge(clang::QualType Type, const clang::dataflow::Value & Val1, const clang::dataflow::Environment & Env1, const clang::dataflow::Value & Val2, const clang::dataflow::Environment & Env2, clang::dataflow::Value & MergedVal, clang::dataflow::Environment & MergedEnv)
- public static ast_matchers::DeclarationMatcher optionalClassDecl()
- public void transfer(const clang::Stmt * Stmt, clang::dataflow::NoopLattice & State, clang::dataflow::Environment & Env)
Methods
¶UncheckedOptionalAccessModel(
clang::ASTContext& AstContext,
clang::dataflow::
UncheckedOptionalAccessModelOptions
Options = {})
UncheckedOptionalAccessModel(
clang::ASTContext& AstContext,
clang::dataflow::
UncheckedOptionalAccessModelOptions
Options = {})
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:47
Parameters
- clang::ASTContext& AstContext
- clang::dataflow:: UncheckedOptionalAccessModelOptions Options = {}
¶bool compareEquivalent(
clang::QualType Type,
const clang::dataflow::Value& Val1,
const clang::dataflow::Environment& Env1,
const clang::dataflow::Value& Val2,
const clang::dataflow::Environment& Env2)
bool compareEquivalent(
clang::QualType Type,
const clang::dataflow::Value& Val1,
const clang::dataflow::Environment& Env1,
const clang::dataflow::Value& Val2,
const clang::dataflow::Environment& Env2)
Description
Returns true if and only if `Val1` is equivalent to `Val2`. Requirements: `Val1` and `Val2` must be distinct. `Val1` and `Val2` must model values of type `Type`. `Val1` and `Val2` must be assigned to the same storage location in `Env1` and `Env2` respectively.
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:57
Parameters
- clang::QualType Type
- const clang::dataflow::Value& Val1
- const clang::dataflow::Environment& Env1
- const clang::dataflow::Value& Val2
- const clang::dataflow::Environment& Env2
¶static clang::dataflow::NoopLattice
initialElement()
static clang::dataflow::NoopLattice
initialElement()
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:53
¶bool merge(
clang::QualType Type,
const clang::dataflow::Value& Val1,
const clang::dataflow::Environment& Env1,
const clang::dataflow::Value& Val2,
const clang::dataflow::Environment& Env2,
clang::dataflow::Value& MergedVal,
clang::dataflow::Environment& MergedEnv)
bool merge(
clang::QualType Type,
const clang::dataflow::Value& Val1,
const clang::dataflow::Environment& Env1,
const clang::dataflow::Value& Val2,
const clang::dataflow::Environment& Env2,
clang::dataflow::Value& MergedVal,
clang::dataflow::Environment& MergedEnv)
Description
Modifies `MergedVal` to approximate both `Val1` and `Val2`. This could be a strict lattice join or a more general widening operation. If this function returns true, `MergedVal` will be assigned to a storage location of type `Type` in `MergedEnv`. `Env1` and `Env2` can be used to query child values and path condition implications of `Val1` and `Val2` respectively. Requirements: `Val1` and `Val2` must be distinct. `Val1`, `Val2`, and `MergedVal` must model values of type `Type`. `Val1` and `Val2` must be assigned to the same storage location in `Env1` and `Env2` respectively.
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:61
Parameters
- clang::QualType Type
- const clang::dataflow::Value& Val1
- const clang::dataflow::Environment& Env1
- const clang::dataflow::Value& Val2
- const clang::dataflow::Environment& Env2
- clang::dataflow::Value& MergedVal
- clang::dataflow::Environment& MergedEnv
¶static ast_matchers::DeclarationMatcher
optionalClassDecl()
static ast_matchers::DeclarationMatcher
optionalClassDecl()
Description
Returns a matcher for the optional classes covered by this model.
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:51
¶void transfer(const clang::Stmt* Stmt,
clang::dataflow::NoopLattice& State,
clang::dataflow::Environment& Env)
void transfer(const clang::Stmt* Stmt,
clang::dataflow::NoopLattice& State,
clang::dataflow::Environment& Env)
Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:55
Parameters
- const clang::Stmt* Stmt
- clang::dataflow::NoopLattice& State
- clang::dataflow::Environment& Env