#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATE_H
#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_PROGRAMSTATE_H
#include "clang/Basic/LLVM.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/Environment.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/Store.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/Support/Allocator.h"
#include <optional>
#include <utility>
namespace llvm {
class APSInt;
}
namespace clang {
class ASTContext;
namespace ento {
class AnalysisManager;
class CallEvent;
class CallEventManager;
ConstraintManagerCreator;
StoreManagerCreator;
template <typename T> struct ProgramStateTrait { … };
class ProgramState : public llvm::FoldingSetNode { … };
class ProgramStateManager { … };
inline ConstraintManager &ProgramState::getConstraintManager() const { … }
inline const VarRegion* ProgramState::getRegion(const VarDecl *D,
const LocationContext *LC) const
{ … }
inline ProgramStateRef ProgramState::assume(DefinedOrUnknownSVal Cond,
bool Assumption) const { … }
inline std::pair<ProgramStateRef , ProgramStateRef >
ProgramState::assume(DefinedOrUnknownSVal Cond) const { … }
inline ProgramStateRef ProgramState::assumeInclusiveRange(
DefinedOrUnknownSVal Val, const llvm::APSInt &From, const llvm::APSInt &To,
bool Assumption) const { … }
inline std::pair<ProgramStateRef, ProgramStateRef>
ProgramState::assumeInclusiveRange(DefinedOrUnknownSVal Val,
const llvm::APSInt &From,
const llvm::APSInt &To) const { … }
inline ProgramStateRef ProgramState::bindLoc(SVal LV, SVal V, const LocationContext *LCtx) const { … }
inline Loc ProgramState::getLValue(const CXXBaseSpecifier &BaseSpec,
const SubRegion *Super) const { … }
inline Loc ProgramState::getLValue(const CXXRecordDecl *BaseClass,
const SubRegion *Super,
bool IsVirtual) const { … }
inline Loc ProgramState::getLValue(const VarDecl *VD,
const LocationContext *LC) const { … }
inline Loc ProgramState::getLValue(const CompoundLiteralExpr *literal,
const LocationContext *LC) const { … }
inline SVal ProgramState::getLValue(const ObjCIvarDecl *D, SVal Base) const { … }
inline SVal ProgramState::getLValue(QualType ElementType, SVal Idx, SVal Base) const{ … }
inline SVal ProgramState::getSVal(const Stmt *Ex,
const LocationContext *LCtx) const{ … }
inline SVal
ProgramState::getSValAsScalarOrLoc(const Stmt *S,
const LocationContext *LCtx) const { … }
inline SVal ProgramState::getRawSVal(Loc LV, QualType T) const { … }
inline SVal ProgramState::getSVal(const MemRegion* R, QualType T) const { … }
inline BasicValueFactory &ProgramState::getBasicVals() const { … }
inline SymbolManager &ProgramState::getSymbolManager() const { … }
template<typename T>
ProgramStateRef ProgramState::add(typename ProgramStateTrait<T>::key_type K) const { … }
template <typename T>
typename ProgramStateTrait<T>::context_type ProgramState::get_context() const { … }
template<typename T>
ProgramStateRef ProgramState::remove(typename ProgramStateTrait<T>::key_type K) const { … }
template<typename T>
ProgramStateRef ProgramState::remove(typename ProgramStateTrait<T>::key_type K,
typename ProgramStateTrait<T>::context_type C) const { … }
template <typename T>
ProgramStateRef ProgramState::remove() const { … }
template<typename T>
ProgramStateRef ProgramState::set(typename ProgramStateTrait<T>::data_type D) const { … }
template<typename T>
ProgramStateRef ProgramState::set(typename ProgramStateTrait<T>::key_type K,
typename ProgramStateTrait<T>::value_type E) const { … }
template<typename T>
ProgramStateRef ProgramState::set(typename ProgramStateTrait<T>::key_type K,
typename ProgramStateTrait<T>::value_type E,
typename ProgramStateTrait<T>::context_type C) const { … }
template <typename CB>
CB ProgramState::scanReachableSymbols(SVal val) const { … }
template <typename CB>
CB ProgramState::scanReachableSymbols(
llvm::iterator_range<region_iterator> Reachable) const { … }
class ScanReachableSymbols { … };
}
}
#endif