clang: clang::ento::ProgramState Class Reference (original) (raw)

ProgramState - This class encapsulates: More...

#include "[clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h](ProgramState%5F8h%5Fsource.html)"

Public Member Functions
ProgramState (ProgramStateManager *mgr, const Environment &env, StoreRef st, GenericDataMap gdm)
This ctor is used when creating the first ProgramState object.
ProgramState (const ProgramState &RHS)
Copy ctor - We must explicitly define this or else the "Next" ptr in FoldingSetNode will also get copied.
~ProgramState ()
int64_t getID () const
ProgramStateManager & getStateManager () const
Return the ProgramStateManager associated with this state.
AnalysisManager & getAnalysisManager () const
ConstraintManager & getConstraintManager () const
Return the ConstraintManager.
const Environment & getEnvironment () const
getEnvironment - Return the environment associated with this state.
Store getStore () const
Return the store associated with this state.
GenericDataMap getGDM () const
getGDM - Return the generic data map associated with this state.
void setGDM (GenericDataMap gdm)
void Profile (llvm::FoldingSetNodeID &ID) const
Profile - Used to profile the contents of this object for inclusion in a FoldingSet.
BasicValueFactory & getBasicVals () const
SymbolManager & getSymbolManager () const
ProgramStateRef assume (DefinedOrUnknownSVal cond, bool assumption) const
Assumes that the value of cond is zero (if assumption is "false") or non-zero (if assumption is "true").
std::pair< ProgramStateRef, ProgramStateRef > assume (DefinedOrUnknownSVal cond) const
Assumes both "true" and "false" for cond, and returns both corresponding states (respectively).
std::pair< ProgramStateRef, ProgramStateRef > assumeInBoundDual (DefinedOrUnknownSVal idx, DefinedOrUnknownSVal upperBound, QualType IndexType=QualType()) const
ProgramStateRef assumeInBound (DefinedOrUnknownSVal idx, DefinedOrUnknownSVal upperBound, bool assumption, QualType IndexType=QualType()) const
ProgramStateRef assumeInclusiveRange (DefinedOrUnknownSVal Val, const llvm::APSInt &From, const llvm::APSInt &To, bool assumption) const
Assumes that the value of Val is bounded with [From; To] (if assumption is "true") or it is fully out of this range (if assumption is "false").
std::pair< ProgramStateRef, ProgramStateRef > assumeInclusiveRange (DefinedOrUnknownSVal Val, const llvm::APSInt &From, const llvm::APSInt &To) const
Assumes given range both "true" and "false" for Val, and returns both corresponding states (respectively).
ConditionTruthVal isNonNull (SVal V) const
Check if the given SVal is not constrained to zero and is not a zero constant.
ConditionTruthVal isNull (SVal V) const
Check if the given SVal is constrained to zero or is a zero constant.
ConditionTruthVal areEqual (SVal Lhs, SVal Rhs) const
LLVM_ATTRIBUTE_RETURNS_NONNULL const VarRegion * getRegion (const VarDecl *D, const LocationContext *LC) const
Utility method for getting regions.
ProgramStateRef BindExpr (const Stmt *S, const LocationContext *LCtx, SVal V, bool Invalidate=true) const
Create a new state by binding the value 'V' to the statement 'S' in the state's environment.
ProgramStateRef bindLoc (Loc location, SVal V, const LocationContext *LCtx, bool notifyChanges=true) const
ProgramStateRef bindLoc (SVal location, SVal V, const LocationContext *LCtx) const
ProgramStateRef bindDefaultInitial (SVal loc, SVal V, const LocationContext *LCtx) const
Initializes the region of memory represented by loc with an initial value.
ProgramStateRef bindDefaultZero (SVal loc, const LocationContext *LCtx) const
Performs C++ zero-initialization procedure on the region of memory represented by loc.
ProgramStateRef killBinding (Loc LV) const
ProgramStateRef invalidateRegions (ArrayRef< const MemRegion * > Regions, const Stmt *S, unsigned BlockCount, const LocationContext *LCtx, bool CausesPointerEscape, InvalidatedSymbols *IS=nullptr, const CallEvent *Call=nullptr, RegionAndSymbolInvalidationTraits *ITraits=nullptr) const
Returns the state with bindings for the given regions cleared from the store.
ProgramStateRef invalidateRegions (ArrayRef< SVal > Values, const Stmt *S, unsigned BlockCount, const LocationContext *LCtx, bool CausesPointerEscape, InvalidatedSymbols *IS=nullptr, const CallEvent *Call=nullptr, RegionAndSymbolInvalidationTraits *ITraits=nullptr) const
ProgramStateRef enterStackFrame (const CallEvent &Call, const StackFrameContext *CalleeCtx) const
enterStackFrame - Returns the state for entry to the given stack frame, preserving the current state.
SVal getSelfSVal (const LocationContext *LC) const
Return the value of 'self' if available in the given context.
Loc getLValue (const CXXBaseSpecifier &BaseSpec, const SubRegion *Super) const
Get the lvalue for a base class object reference.
Loc getLValue (const CXXRecordDecl *BaseClass, const SubRegion *Super, bool IsVirtual) const
Get the lvalue for a base class object reference.
Loc getLValue (const VarDecl *D, const LocationContext *LC) const
Get the lvalue for a variable reference.
Loc getLValue (const CompoundLiteralExpr *literal, const LocationContext *LC) const
SVal getLValue (const ObjCIvarDecl *decl, SVal base) const
Get the lvalue for an ivar reference.
SVal getLValue (const FieldDecl *decl, SVal Base) const
Get the lvalue for a field reference.
SVal getLValue (const IndirectFieldDecl *decl, SVal Base) const
Get the lvalue for an indirect field reference.
SVal getLValue (QualType ElementType, SVal Idx, SVal Base) const
Get the lvalue for an array index.
SVal getSVal (const Stmt *S, const LocationContext *LCtx) const
Returns the SVal bound to the statement 'S' in the state's environment.
SVal getSValAsScalarOrLoc (const Stmt *Ex, const LocationContext *LCtx) const
SVal getSVal (Loc LV, QualType T=QualType()) const
Return the value bound to the specified location.
SVal getRawSVal (Loc LV, QualType T=QualType()) const
Returns the "raw" SVal bound to LV before any value simplfication.
SVal getSVal (const MemRegion *R, QualType T=QualType()) const
Return the value bound to the specified location.
SVal getSValAsScalarOrLoc (const MemRegion *R) const
Return the value bound to the specified location, assuming that the value is a scalar integer or an enumeration or a pointer.
bool scanReachableSymbols (SVal val, SymbolVisitor &visitor) const
Visits the symbols reachable from the given SVal using the provided SymbolVisitor.
bool scanReachableSymbols (llvm::iterator_range< region_iterator > Reachable, SymbolVisitor &visitor) const
Visits the symbols reachable from the regions in the given MemRegions range using the provided SymbolVisitor.
template
CB scanReachableSymbols (SVal val) const
template
CB scanReachableSymbols (llvm::iterator_range< region_iterator > Reachable) const
void *const * FindGDM (void *K) const
template<typename T >
ProgramStateRef add (typename ProgramStateTrait< T >::key_type K) const
template<typename T >
ProgramStateTrait< T >::data_type get () const
template<typename T >
ProgramStateTrait< T >::lookup_type get (typename ProgramStateTrait< T >::key_type key) const
template<typename T >
ProgramStateTrait< T >::context_type get_context () const
template<typename T >
ProgramStateRef remove (typename ProgramStateTrait< T >::key_type K) const
template<typename T >
ProgramStateRef remove (typename ProgramStateTrait< T >::key_type K, typename ProgramStateTrait< T >::context_type C) const
template<typename T >
ProgramStateRef remove () const
template<typename T >
ProgramStateRef set (typename ProgramStateTrait< T >::data_type D) const
template<typename T >
ProgramStateRef set (typename ProgramStateTrait< T >::key_type K, typename ProgramStateTrait< T >::value_type E) const
template<typename T >
ProgramStateRef set (typename ProgramStateTrait< T >::key_type K, typename ProgramStateTrait< T >::value_type E, typename ProgramStateTrait< T >::context_type C) const
template<typename T >
bool contains (typename ProgramStateTrait< T >::key_type key) const
void printJson (raw_ostream &Out, const LocationContext *LCtx=nullptr, const char *NL="\n", unsigned int Space=0, bool IsDot=false) const
void printDOT (raw_ostream &Out, const LocationContext *LCtx=nullptr, unsigned int Space=0) const
void dump () const
Static Public Member Functions
static void Profile (llvm::FoldingSetNodeID &ID, const ProgramState *V)
Profile - Profile the contents of a ProgramState object for use in a FoldingSet.
Friends
class ProgramStateManager
class ExplodedGraph
class ExplodedNode
class NodeBuilder
class ConstraintManager
void ProgramStateRetain (const ProgramState *state)
Increments the number of times this state is referenced.
void ProgramStateRelease (const ProgramState *state)
Decrement the number of times this state is referenced.

ProgramState - This class encapsulates:

  1. A mapping from expressions to values (Environment)
  2. A mapping from locations to values (Store)
  3. Constraints on symbolic values (GenericDataMap)

Together these represent the "abstract state" of a program.

ProgramState is intended to be used as a functional object; that is, once it is created and made "persistent" in a FoldingSet, its values will never change.

Definition at line 71 of file ProgramState.h.

GenericDataMap

region_iterator

ProgramState() [2/2]

~ProgramState()

ProgramState::~ProgramState ( )

add()

areEqual()

assume() [1/2]

assume() [2/2]

assumeInBound()

assumeInBoundDual()

Definition at line 317 of file ProgramState.cpp.

References clang::ento::ConstraintManager::assumeDual(), clang::ento::SVal::castAs(), clang::ento::SValBuilder::evalBinOpNN(), clang::ento::SValBuilder::getArrayIndexType(), clang::ento::SValBuilder::getBasicValueFactory(), clang::ento::SValBuilder::getContext(), clang::ento::BasicValueFactory::getMinValue(), getStateManager(), clang::ASTContext::IntTy, clang::QualType::isNull(), clang::ento::SVal::isUnknown(), clang::ento::SVal::isUnknownOrUndef(), clang::Min, and SM.

Referenced by assumeInBound().

assumeInclusiveRange() [1/2]

assumeInclusiveRange() [2/2]

bindDefaultInitial()

bindDefaultZero()

BindExpr()

bindLoc() [1/2]

bindLoc() [2/2]

contains()

dump()

LLVM_DUMP_METHOD void ProgramState::dump ( ) const

enterStackFrame()

FindGDM()

void *const * ProgramState::FindGDM ( void * K ) const

get() [1/2]

get() [2/2]

get_context()

getAnalysisManager()

getBasicVals()

getConstraintManager()

getEnvironment()

const Environment & clang::ento::ProgramState::getEnvironment ( ) const inline

getEnvironment - Return the environment associated with this state.

The environment is the mapping from expressions to values.

Definition at line 157 of file ProgramState.h.

References Env.

getGDM()

getGDM - Return the generic data map associated with this state.

Definition at line 165 of file ProgramState.h.

getID()

int64_t ProgramState::getID ( ) const

getLValue() [1/8]

getLValue() [2/8]

getLValue() [3/8]

getLValue() [4/8]

getLValue() [5/8]

getLValue() [6/8]

getLValue() [7/8]

getLValue() [8/8]

SVal clang::ento::ProgramState::getLValue ( QualType ElementType, SVal Idx, SVal Base ) const inline

getRawSVal()

getRegion()

getSelfSVal()

getStateManager()

Return the ProgramStateManager associated with this state.

Definition at line 146 of file ProgramState.h.

Referenced by add(), assume(), assumeInBoundDual(), assumeInclusiveRange(), bindDefaultInitial(), bindDefaultZero(), BindExpr(), bindLoc(), enterStackFrame(), get_context(), getBasicVals(), getID(), getLValue(), getRawSVal(), getRegion(), getSVal(), getSymbolManager(), isNull(), killBinding(), printJson(), remove(), and set().

getStore()

Store clang::ento::ProgramState::getStore ( ) const inline

getSVal() [1/3]

getSVal() [2/3]

getSVal() [3/3]

getSValAsScalarOrLoc() [1/2]

SVal ProgramState::getSValAsScalarOrLoc ( const MemRegion * R ) const

getSValAsScalarOrLoc() [2/2]

SVal clang::ento::ProgramState::getSValAsScalarOrLoc ( const Stmt * Ex, const LocationContext * LCtx ) const inline

getSymbolManager()

SymbolManager & clang::ento::ProgramState::getSymbolManager ( ) const inline

invalidateRegions() [1/2]

Returns the state with bindings for the given regions cleared from the store.

If Call is non-null, also invalidates global regions (but if Call is from a system header, then this is limited to globals declared in system headers).

This calls the lower-level method [StoreManager::invalidateRegions](classclang%5F1%5F1ento%5F1%5F1StoreManager.html#a0df41b22721ee8094707ee175b30d526 "invalidateRegions - Clears out the specified regions from the store, marking their values as unknown.") to do the actual invalidation, then calls the checker callbacks which should be triggered by this event.

Parameters

Regions the set of regions to be invalidated.
E the expression that caused the invalidation.
BlockCount The number of times the current basic block has been visited.
CausesPointerEscape the flag is set to true when the invalidation entails escape of a symbol (representing a pointer). For example, due to it being passed as an argument in a call.
IS the set of invalidated symbols.
Call if non-null, the invalidated regions represent parameters to the call and should be considered directly invalidated.
ITraits information about special handling for particular regions or symbols.

invalidateRegions() [2/2]

isNonNull()

isNull()

killBinding()

printDOT()

printJson()

Definition at line 479 of file ProgramState.cpp.

References clang::ento::ProgramStateManager::getConstraintManager(), clang::ento::ProgramStateManager::getContext(), clang::ento::ProgramStateManager::getOwningEngine(), getStateManager(), getStore(), clang::ento::ProgramStateManager::getStoreManager(), clang::ento::printDynamicTypeInfoJson(), clang::ento::Environment::printJson(), clang::ento::ConstraintManager::printJson(), clang::ento::ExprEngine::printJson(), and clang::ento::StoreManager::printJson().

Referenced by dump(), and printDOT().

Profile() [1/2]

void clang::ento::ProgramState::Profile ( llvm::FoldingSetNodeID & ID) const inline

Profile - Used to profile the contents of this object for inclusion in a FoldingSet.

Definition at line 181 of file ProgramState.h.

References ID, and Profile().

Profile() [2/2]

static void clang::ento::ProgramState::Profile ( llvm::FoldingSetNodeID & ID, const ProgramState * V ) inlinestatic

remove() [1/3]

remove() [2/3]

remove() [3/3]

scanReachableSymbols() [1/4]

template

CB clang::ento::ProgramState::scanReachableSymbols ( llvm::iterator_range< region_iterator > Reachable ) const

scanReachableSymbols() [2/4]

scanReachableSymbols() [3/4]

template

CB clang::ento::ProgramState::scanReachableSymbols ( SVal val ) const

scanReachableSymbols() [4/4]

set() [1/3]

set() [2/3]

set() [3/3]

setGDM()

ConstraintManager

ExplodedGraph

ExplodedNode

NodeBuilder

ProgramStateManager

ProgramStateRelease

void ProgramStateRelease ( const ProgramState * state) friend

Decrement the number of times this state is referenced.

Definition at line 35 of file ProgramState.cpp.

ProgramStateRetain

void ProgramStateRetain ( const ProgramState * state) friend

Increments the number of times this state is referenced.

Definition at line 30 of file ProgramState.cpp.


The documentation for this class was generated from the following files: