class ConstraintManager

Declaration

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

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:69

Member Variables

protected clang::ento::ConstraintManager::AssumeStackTy AssumeStack

Method Overview

  • public ConstraintManager()
  • public clang::ento::ProgramStateRef assume(clang::ento::ProgramStateRef state, clang::ento::DefinedSVal Cond, bool Assumption)
  • public clang::ento::ConstraintManager::ProgramStatePair assumeDual(clang::ento::ProgramStateRef State, clang::ento::DefinedSVal Cond)
  • protected template <typename AssumeFunction>clang::ento::ConstraintManager::ProgramStatePair assumeDualImpl(clang::ento::ProgramStateRef & State, AssumeFunction & Assume)
  • public clang::ento::ProgramStateRef assumeInclusiveRange(clang::ento::ProgramStateRef State, clang::ento::NonLoc Value, const llvm::APSInt & From, const llvm::APSInt & To, bool InBound)
  • public clang::ento::ConstraintManager::ProgramStatePair assumeInclusiveRangeDual(clang::ento::ProgramStateRef State, clang::ento::NonLoc Value, const llvm::APSInt & From, const llvm::APSInt & To)
  • protected virtual clang::ento::ProgramStateRef assumeInclusiveRangeInternal(clang::ento::ProgramStateRef State, clang::ento::NonLoc Value, const llvm::APSInt & From, const llvm::APSInt & To, bool InBound)
  • protected virtual clang::ento::ProgramStateRef assumeInternal(clang::ento::ProgramStateRef state, clang::ento::DefinedSVal Cond, bool Assumption)
  • protected virtual bool canReasonAbout(clang::ento::SVal X) const
  • protected virtual clang::ento::ConditionTruthVal checkNull(clang::ento::ProgramStateRef State, clang::ento::SymbolRef Sym)
  • public virtual const llvm::APSInt * getSymVal(clang::ento::ProgramStateRef state, clang::ento::SymbolRef sym) const
  • public virtual bool haveEqualConstraints(clang::ento::ProgramStateRef S1, clang::ento::ProgramStateRef S2) const
  • public clang::ento::ConditionTruthVal isNull(clang::ento::ProgramStateRef State, clang::ento::SymbolRef Sym)
  • public virtual void printJson(llvm::raw_ostream & Out, clang::ento::ProgramStateRef State, const char * NL, unsigned int Space, bool IsDot) const
  • public virtual void printValue(llvm::raw_ostream & Out, clang::ento::ProgramStateRef State, clang::ento::SymbolRef Sym)
  • public virtual clang::ento::ProgramStateRef removeDeadBindings(clang::ento::ProgramStateRef state, clang::ento::SymbolReaper & SymReaper)
  • public virtual ~ConstraintManager()

Methods

ConstraintManager()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:71

clang::ento::ProgramStateRef assume(
    clang::ento::ProgramStateRef state,
    clang::ento::DefinedSVal Cond,
    bool Assumption)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:77

Parameters

clang::ento::ProgramStateRef state
clang::ento::DefinedSVal Cond
bool Assumption

clang::ento::ConstraintManager::ProgramStatePair
assumeDual(clang::ento::ProgramStateRef State,
           clang::ento::DefinedSVal Cond)

Description

Returns a pair of states (StTrue, StFalse) where the given condition is assumed to be true or false, respectively. (Note that these two states might be equal if the parent state turns out to be infeasible. This may happen if the underlying constraint solver is not perfectly precise and this may happen very rarely.)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:87

Parameters

clang::ento::ProgramStateRef State
clang::ento::DefinedSVal Cond

template <typename AssumeFunction>
clang::ento::ConstraintManager::ProgramStatePair
assumeDualImpl(
    clang::ento::ProgramStateRef& State,
    AssumeFunction& Assume)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:167

Templates

AssumeFunction

Parameters

clang::ento::ProgramStateRef& State
AssumeFunction& Assume

clang::ento::ProgramStateRef assumeInclusiveRange(
    clang::ento::ProgramStateRef State,
    clang::ento::NonLoc Value,
    const llvm::APSInt& From,
    const llvm::APSInt& To,
    bool InBound)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:89

Parameters

clang::ento::ProgramStateRef State
clang::ento::NonLoc Value
const llvm::APSInt& From
const llvm::APSInt& To
bool InBound

clang::ento::ConstraintManager::ProgramStatePair
assumeInclusiveRangeDual(
    clang::ento::ProgramStateRef State,
    clang::ento::NonLoc Value,
    const llvm::APSInt& From,
    const llvm::APSInt& To)

Description

Returns a pair of states (StInRange, StOutOfRange) where the given value is assumed to be in the range or out of the range, respectively. (Note that these two states might be equal if the parent state turns out to be infeasible. This may happen if the underlying constraint solver is not perfectly precise and this may happen very rarely.)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:98

Parameters

clang::ento::ProgramStateRef State
clang::ento::NonLoc Value
const llvm::APSInt& From
const llvm::APSInt& To

virtual clang::ento::ProgramStateRef
assumeInclusiveRangeInternal(
    clang::ento::ProgramStateRef State,
    clang::ento::NonLoc Value,
    const llvm::APSInt& From,
    const llvm::APSInt& To,
    bool InBound)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:149

Parameters

clang::ento::ProgramStateRef State
clang::ento::NonLoc Value
const llvm::APSInt& From
const llvm::APSInt& To
bool InBound

virtual clang::ento::ProgramStateRef
assumeInternal(clang::ento::ProgramStateRef state,
               clang::ento::DefinedSVal Cond,
               bool Assumption)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:146

Parameters

clang::ento::ProgramStateRef state
clang::ento::DefinedSVal Cond
bool Assumption

virtual bool canReasonAbout(
    clang::ento::SVal X) const

Description

canReasonAbout - Not all ConstraintManagers can accurately reason about all SVal values. This method returns true if the ConstraintManager can reasonably handle a given SVal value. This is typically queried by ExprEngine to determine if the value should be replaced with a conjured symbolic value in order to recover some precision.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:160

Parameters

clang::ento::SVal X

virtual clang::ento::ConditionTruthVal checkNull(
    clang::ento::ProgramStateRef State,
    clang::ento::SymbolRef Sym)

Description

Returns whether or not a symbol is known to be null ("true"), known to be non-null ("false"), or may be either ("underconstrained").

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:164

Parameters

clang::ento::ProgramStateRef State
clang::ento::SymbolRef Sym

virtual const llvm::APSInt* getSymVal(
    clang::ento::ProgramStateRef state,
    clang::ento::SymbolRef sym) const

Description

If a symbol is perfectly constrained to a constant, attempt to return the concrete value. Note that a ConstraintManager is not obligated to return a concretized value for a symbol, even if it is perfectly constrained. It might return null.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:108

Parameters

clang::ento::ProgramStateRef state
clang::ento::SymbolRef sym

virtual bool haveEqualConstraints(
    clang::ento::ProgramStateRef S1,
    clang::ento::ProgramStateRef S2) const

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:74

Parameters

clang::ento::ProgramStateRef S1
clang::ento::ProgramStateRef S2

clang::ento::ConditionTruthVal isNull(
    clang::ento::ProgramStateRef State,
    clang::ento::SymbolRef Sym)

Description

Convenience method to query the state to see if a symbol is null or not null, or if neither assumption can be made.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:127

Parameters

clang::ento::ProgramStateRef State
clang::ento::SymbolRef Sym

virtual void printJson(
    llvm::raw_ostream& Out,
    clang::ento::ProgramStateRef State,
    const char* NL,
    unsigned int Space,
    bool IsDot) const

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:118

Parameters

llvm::raw_ostream& Out
clang::ento::ProgramStateRef State
const char* NL
unsigned int Space
bool IsDot

virtual void printValue(
    llvm::raw_ostream& Out,
    clang::ento::ProgramStateRef State,
    clang::ento::SymbolRef Sym)

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:122

Parameters

llvm::raw_ostream& Out
clang::ento::ProgramStateRef State
clang::ento::SymbolRef Sym

virtual clang::ento::ProgramStateRef
removeDeadBindings(
    clang::ento::ProgramStateRef state,
    clang::ento::SymbolReaper& SymReaper)

Description

Scan all symbols referenced by the constraints. If the symbol is not alive, remove it.

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:115

Parameters

clang::ento::ProgramStateRef state
clang::ento::SymbolReaper& SymReaper

virtual ~ConstraintManager()

Declared at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:72