class SymbolManager

Declaration

class SymbolManager { /* full declaration omitted */ };

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:481

Member Variables

private clang::ento::SymbolManager::DataSetTy DataSet
private clang::ento::SymbolManager::SymbolDependTy SymbolDependencies
Stores the extra dependencies between symbols: the data should be kept alive as long as the key is live.
private unsigned int SymbolCounter = 0
private llvm::BumpPtrAllocator& BPAlloc
private clang::ento::BasicValueFactory& BV
private clang::ASTContext& Ctx

Method Overview

  • public SymbolManager(clang::ASTContext & ctx, clang::ento::BasicValueFactory & bv, llvm::BumpPtrAllocator & bpalloc)
  • public void addSymbolDependency(const clang::ento::SymbolRef Primary, const clang::ento::SymbolRef Dependent)
  • public static bool canSymbolicate(clang::QualType T)
  • public const clang::ento::SymbolConjured * conjureSymbol(const clang::Stmt * E, const clang::LocationContext * LCtx, clang::QualType T, unsigned int VisitCount, const void * SymbolTag = nullptr)
  • public const clang::ento::SymbolConjured * conjureSymbol(const clang::Expr * E, const clang::LocationContext * LCtx, unsigned int VisitCount, const void * SymbolTag = nullptr)
  • public clang::ento::BasicValueFactory & getBasicVals()
  • public const clang::ento::SymbolCast * getCastSymbol(const clang::ento::SymExpr * Operand, clang::QualType From, clang::QualType To)
  • public clang::ASTContext & getContext()
  • public const clang::ento::SymbolRefSmallVectorTy * getDependentSymbols(const clang::ento::SymbolRef Primary)
  • public const clang::ento::SymbolDerived * getDerivedSymbol(clang::ento::SymbolRef parentSymbol, const clang::ento::TypedValueRegion * R)
  • public const clang::ento::SymbolExtent * getExtentSymbol(const clang::ento::SubRegion * R)
  • public const clang::ento::IntSymExpr * getIntSymExpr(const llvm::APSInt & lhs, BinaryOperator::Opcode op, const clang::ento::SymExpr * rhs, clang::QualType t)
  • public const clang::ento::SymbolMetadata * getMetadataSymbol(const clang::ento::MemRegion * R, const clang::Stmt * S, clang::QualType T, const clang::LocationContext * LCtx, unsigned int VisitCount, const void * SymbolTag = nullptr)
  • public const clang::ento::SymbolRegionValue * getRegionValueSymbol(const clang::ento::TypedValueRegion * R)
  • public const clang::ento::SymIntExpr * getSymIntExpr(const clang::ento::SymExpr * lhs, BinaryOperator::Opcode op, const llvm::APSInt & rhs, clang::QualType t)
  • public const clang::ento::SymIntExpr * getSymIntExpr(const clang::ento::SymExpr & lhs, BinaryOperator::Opcode op, const llvm::APSInt & rhs, clang::QualType t)
  • public const clang::ento::SymSymExpr * getSymSymExpr(const clang::ento::SymExpr * lhs, BinaryOperator::Opcode op, const clang::ento::SymExpr * rhs, clang::QualType t)
  • public clang::QualType getType(const clang::ento::SymExpr * SE) const
  • public const clang::ento::UnarySymExpr * getUnarySymExpr(const clang::ento::SymExpr * operand, UnaryOperator::Opcode op, clang::QualType t)

Methods

SymbolManager(clang::ASTContext& ctx,
              clang::ento::BasicValueFactory& bv,
              llvm::BumpPtrAllocator& bpalloc)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:498

Parameters

clang::ASTContext& ctx
clang::ento::BasicValueFactory& bv
llvm::BumpPtrAllocator& bpalloc

void addSymbolDependency(
    const clang::ento::SymbolRef Primary,
    const clang::ento::SymbolRef Dependent)

Description

Add artificial symbol dependency. The dependent symbol should stay alive as long as the primary is alive.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:563

Parameters

const clang::ento::SymbolRef Primary
const clang::ento::SymbolRef Dependent

static bool canSymbolicate(clang::QualType T)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:502

Parameters

clang::QualType T

const clang::ento::SymbolConjured* conjureSymbol(
    const clang::Stmt* E,
    const clang::LocationContext* LCtx,
    clang::QualType T,
    unsigned int VisitCount,
    const void* SymbolTag = nullptr)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:507

Parameters

const clang::Stmt* E
const clang::LocationContext* LCtx
clang::QualType T
unsigned int VisitCount
const void* SymbolTag = nullptr

const clang::ento::SymbolConjured* conjureSymbol(
    const clang::Expr* E,
    const clang::LocationContext* LCtx,
    unsigned int VisitCount,
    const void* SymbolTag = nullptr)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:513

Parameters

const clang::Expr* E
const clang::LocationContext* LCtx
unsigned int VisitCount
const void* SymbolTag = nullptr

clang::ento::BasicValueFactory& getBasicVals()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:568

const clang::ento::SymbolCast* getCastSymbol(
    const clang::ento::SymExpr* Operand,
    clang::QualType From,
    clang::QualType To)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:535

Parameters

const clang::ento::SymExpr* Operand
clang::QualType From
clang::QualType To

clang::ASTContext& getContext()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:567

const clang::ento::SymbolRefSmallVectorTy*
getDependentSymbols(
    const clang::ento::SymbolRef Primary)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:565

Parameters

const clang::ento::SymbolRef Primary

const clang::ento::SymbolDerived*
getDerivedSymbol(
    clang::ento::SymbolRef parentSymbol,
    const clang::ento::TypedValueRegion* R)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:520

Parameters

clang::ento::SymbolRef parentSymbol
const clang::ento::TypedValueRegion* R

const clang::ento::SymbolExtent* getExtentSymbol(
    const clang::ento::SubRegion* R)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:523

Parameters

const clang::ento::SubRegion* R

const clang::ento::IntSymExpr* getIntSymExpr(
    const llvm::APSInt& lhs,
    BinaryOperator::Opcode op,
    const clang::ento::SymExpr* rhs,
    clang::QualType t)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:546

Parameters

const llvm::APSInt& lhs
BinaryOperator::Opcode op
const clang::ento::SymExpr* rhs
clang::QualType t

const clang::ento::SymbolMetadata*
getMetadataSymbol(
    const clang::ento::MemRegion* R,
    const clang::Stmt* S,
    clang::QualType T,
    const clang::LocationContext* LCtx,
    unsigned int VisitCount,
    const void* SymbolTag = nullptr)

Description

Creates a metadata symbol associated with a specific region. VisitCount can be used to differentiate regions corresponding to different loop iterations, thus, making the symbol path-dependent.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:529

Parameters

const clang::ento::MemRegion* R
const clang::Stmt* S
clang::QualType T
const clang::LocationContext* LCtx
unsigned int VisitCount
const void* SymbolTag = nullptr

const clang::ento::SymbolRegionValue*
getRegionValueSymbol(
    const clang::ento::TypedValueRegion* R)

Description

Make a unique symbol for MemRegion R according to its kind.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:505

Parameters

const clang::ento::TypedValueRegion* R

const clang::ento::SymIntExpr* getSymIntExpr(
    const clang::ento::SymExpr* lhs,
    BinaryOperator::Opcode op,
    const llvm::APSInt& rhs,
    clang::QualType t)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:538

Parameters

const clang::ento::SymExpr* lhs
BinaryOperator::Opcode op
const llvm::APSInt& rhs
clang::QualType t

const clang::ento::SymIntExpr* getSymIntExpr(
    const clang::ento::SymExpr& lhs,
    BinaryOperator::Opcode op,
    const llvm::APSInt& rhs,
    clang::QualType t)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:541

Parameters

const clang::ento::SymExpr& lhs
BinaryOperator::Opcode op
const llvm::APSInt& rhs
clang::QualType t

const clang::ento::SymSymExpr* getSymSymExpr(
    const clang::ento::SymExpr* lhs,
    BinaryOperator::Opcode op,
    const clang::ento::SymExpr* rhs,
    clang::QualType t)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:550

Parameters

const clang::ento::SymExpr* lhs
BinaryOperator::Opcode op
const clang::ento::SymExpr* rhs
clang::QualType t

clang::QualType getType(
    const clang::ento::SymExpr* SE) const

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:556

Parameters

const clang::ento::SymExpr* SE

const clang::ento::UnarySymExpr* getUnarySymExpr(
    const clang::ento::SymExpr* operand,
    UnaryOperator::Opcode op,
    clang::QualType t)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h:553

Parameters

const clang::ento::SymExpr* operand
UnaryOperator::Opcode op
clang::QualType t