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 = {})

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)

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()

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)

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()

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)

Declared at: clang/include/clang/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.h:55

Parameters

const clang::Stmt* Stmt
clang::dataflow::NoopLattice& State
clang::dataflow::Environment& Env