clang
9.0.0svn
|
SVal - This represents a symbolic expression, which can be either an L-value or an R-value. More...
#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
Public Types | |
enum | BaseKind |
enum | { BaseBits = 2, BaseMask = 0x3 } |
Public Member Functions | |
SVal ()=default | |
template<typename T > | |
T | castAs () const |
Convert to the specified SVal type, asserting that this SVal is of the desired type. More... | |
template<typename T > | |
Optional< T > | getAs () const |
Convert to the specified SVal type, returning None if this SVal is not of the desired type. More... | |
unsigned | getRawKind () const |
BaseKind | getBaseKind () const |
unsigned | getSubKind () const |
void | Profile (llvm::FoldingSetNodeID &ID) const |
bool | operator== (const SVal &R) const |
bool | operator!= (const SVal &R) const |
bool | isUnknown () const |
bool | isUndef () const |
bool | isUnknownOrUndef () const |
bool | isValid () const |
bool | isConstant () const |
bool | isConstant (int I) const |
bool | isZeroConstant () const |
bool | hasConjuredSymbol () const |
hasConjuredSymbol - If this SVal wraps a conjured symbol, return true; More... | |
const FunctionDecl * | getAsFunctionDecl () const |
getAsFunctionDecl - If this SVal is a MemRegionVal and wraps a CodeTextRegion wrapping a FunctionDecl, return that FunctionDecl. More... | |
SymbolRef | getAsLocSymbol (bool IncludeBaseRegions=false) const |
If this SVal is a location and wraps a symbol, return that SymbolRef. More... | |
SymbolRef | getLocSymbolInBase () const |
Get the symbol in the SVal or its base region. More... | |
SymbolRef | getAsSymbol (bool IncludeBaseRegions=false) const |
If this SVal wraps a symbol return that SymbolRef. More... | |
const SymExpr * | getAsSymbolicExpression () const |
getAsSymbolicExpression - If this Sval wraps a symbolic expression then return that expression. More... | |
const SymExpr * | getAsSymExpr () const |
const MemRegion * | getAsRegion () const |
void | dumpToStream (raw_ostream &OS) const |
void | dump () const |
SymExpr::symbol_iterator | symbol_begin () const |
SymExpr::symbol_iterator | symbol_end () const |
Protected Member Functions | |
SVal (const void *d, bool isLoc, unsigned ValKind) | |
SVal (BaseKind k, const void *D=nullptr) | |
Protected Attributes | |
const void * | Data = nullptr |
unsigned | Kind = 0 |
The lowest 2 bits are a BaseKind (0 – 3). More... | |
SVal - This represents a symbolic expression, which can be either an L-value or an R-value.
|
inlineexplicitprotected |
|
inlineexplicitprotected |
|
explicitdefault |
|
inline |
Convert to the specified SVal type, asserting that this SVal is of the desired type.
Definition at line 103 of file SVals.h.
Referenced by clang::ento::SimpleConstraintManager::assume(), clang::ento::ProgramState::assume(), clang::ento::ProgramState::assumeInBound(), clang::ento::SimpleConstraintManager::assumeInclusiveRange(), clang::ento::ProgramState::assumeInclusiveRange(), clang::ento::ProgramState::bindDefaultInitial(), clang::ento::ProgramState::bindDefaultZero(), clang::ento::ExprEngine::bindReturnValue(), clang::ento::StoreManager::CastRetrievedVal(), clang::ento::SValBuilder::convertToArrayIndex(), clang::ento::createSimpleSValBuilder(), clang::ento::ExprEngine::evalBind(), clang::ento::SValBuilder::evalBinOp(), clang::ento::ExprEngine::evalBinOp(), clang::ento::SValBuilder::evalCast(), clang::ento::ExprEngine::evalComplement(), clang::ento::SValBuilder::evalEQ(), clang::ento::SValBuilder::evalIntegralCast(), clang::ento::ExprEngine::evalLoad(), clang::ento::ExprEngine::evalMinus(), clang::ento::ExprEngine::getInitialState(), clang::ento::nonloc::LocAsInteger::getLoc(), clang::ento::StoreManager::getLValueElement(), clang::ento::nonloc::LocAsInteger::getPersistentLoc(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::ProcessBaseDtor(), clang::ento::ExprEngine::processBranch(), clang::ento::ExprEngine::processCallExit(), clang::ento::ExprEngine::ProcessMemberDtor(), clang::ento::ExprEngine::processSwitch(), clang::ento::ExprEngine::VisitCallExpr(), clang::ento::ExprEngine::VisitCommonDeclRefExpr(), clang::ento::ExprEngine::VisitCXXNewAllocatorCall(), clang::ento::ExprEngine::VisitIncrementDecrementOperator(), clang::ento::ExprEngine::VisitObjCMessage(), and clang::ento::ExprEngine::VisitUnaryOperator().
LLVM_DUMP_METHOD void SVal::dump | ( | ) | const |
Definition at line 284 of file SVals.cpp.
References dumpToStream().
void SVal::dumpToStream | ( | raw_ostream & | OS | ) | const |
Definition at line 286 of file SVals.cpp.
References getBaseKind().
Referenced by dump(), and clang::ento::operator<<().
|
inline |
Convert to the specified SVal type, returning None if this SVal is not of the desired type.
Definition at line 111 of file SVals.h.
Referenced by clang::ento::SimpleConstraintManager::assume(), clang::ento::ProgramState::assumeInclusiveRange(), clang::ento::ProgramState::bindLoc(), clang::ento::SMTConstraintManager::canReasonAbout(), clang::ento::mpi::MPIChecker::checkMissingWaits(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::SValBuilder::convertToArrayIndex(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::ento::CreateRangeConstraintManager(), clang::ento::createSimpleSValBuilder(), dereference(), DereferenceInfo::DereferenceInfo(), clang::ento::ExprEngine::evalBind(), clang::ento::SValBuilder::evalBinOp(), evalBinOpFieldRegionFieldRegion(), clang::ento::retaincountchecker::RetainCountChecker::evalCall(), clang::ento::SValBuilder::evalCast(), clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(), clang::ento::ExprEngine::evalLoad(), clang::ento::FindUninitializedFields::FindUninitializedFields(), clang::ento::ElementRegion::getAsArrayOffset(), clang::ento::MemRegion::getDescriptiveName(), clang::ento::ExprEngine::getInitialState(), clang::ento::ProgramState::getLValue(), clang::ento::StoreManager::getLValueElement(), clang::ento::StackHintGeneratorForSymbol::getMessage(), clang::ento::ProgramState::getSValAsScalarOrLoc(), clang::ento::ProgramState::killBinding(), clang::ento::SValBuilder::makeSymExprValNN(), clang::ento::ExprEngine::processIndirectGoto(), clang::ento::ExprEngine::ProcessInitializer(), clang::ento::ExprEngine::processPointerEscapedOnBind(), clang::ento::ExprEngine::processSwitch(), clang::ento::ScanReachableSymbols::scan(), updateOutParameters(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCXXConstructExpr(), clang::ento::ExprEngine::VisitCXXNewExpr(), clang::ento::SValExplainer::VisitElementRegion(), and clang::ento::ExprEngine::VisitGCCAsmStmt().
const FunctionDecl * SVal::getAsFunctionDecl | ( | ) | const |
getAsFunctionDecl - If this SVal is a MemRegionVal and wraps a CodeTextRegion wrapping a FunctionDecl, return that FunctionDecl.
Otherwise return 0.
Definition at line 62 of file SVals.cpp.
References clang::ento::MemRegion::getAs(), and X.
Referenced by clang::ento::CheckerContext::getCalleeDecl(), and clang::ento::SimpleFunctionCall::getDecl().
If this SVal is a location and wraps a symbol, return that SymbolRef.
If this SVal is a location (subclasses Loc) and wraps a symbol, return that SymbolRef.
Otherwise return 0.
Casts are ignored during lookup.
IncludeBaseRegions | The boolean that controls whether the search should continue to the base regions if the region is not symbolic. |
Otherwise return 0.
Implicit casts (ex: void* -> char*) can turn Symbolic region into Element region. If that is the case, gets the underlining region. When IncludeBaseRegions is set to true and the SubRegion is non-symbolic, the first symbolic parent region is returned.
Definition at line 84 of file SVals.cpp.
References clang::ento::MemRegion::getSymbolicBase(), clang::ento::MemRegion::StripCasts(), and X.
Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkPostCall(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::retaincountchecker::RetainCountChecker::checkSummary(), getAsSymbol(), clang::ento::StackHintGeneratorForSymbol::getMessage(), clang::ento::StoreManager::FindUniqueBinding::HandleBinding(), clang::ento::retaincountchecker::RetainCountChecker::processSummaryOfInlined(), and updateOutParameters().
const MemRegion * SVal::getAsRegion | ( | ) | const |
Definition at line 150 of file SVals.cpp.
References X.
Referenced by clang::ento::ProgramState::addPartialTaint(), clang::ento::StoreManager::attemptDownCast(), clang::ento::ExprEngine::bindReturnValue(), clang::ento::StoreManager::CastRetrievedVal(), clang::ento::retaincountchecker::RetainCountChecker::checkBind(), clang::ento::mpi::MPIChecker::checkMissingWaits(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), dereference(), clang::ento::SValBuilder::evalCast(), clang::ento::StoreManager::evalDerivedToBase(), clang::BlockCall::getBlockRegion(), getConstructedRegion(), clang::ento::ExprEngine::getInitialState(), clang::ento::BugReport::isInteresting(), clang::ento::BugReport::markInteresting(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::ProcessDeleteDtor(), clang::ento::ExprEngine::ProcessInitializer(), clang::ento::ExprEngine::ProcessTemporaryDtor(), clang::ento::ProgramStateManager::removeDeadBindings(), updateOutParameters(), clang::ento::ExprEngine::VisitBlockExpr(), clang::ento::ExprEngine::VisitCXXConstructExpr(), and clang::ento::ExprEngine::VisitCXXNewExpr().
If this SVal wraps a symbol return that SymbolRef.
Otherwise, return 0.
Casts are ignored during lookup.
IncludeBaseRegions | The boolean that controls whether the search should continue to the base regions if the region is not symbolic. |
Definition at line 126 of file SVals.cpp.
References getAsLocSymbol(), and X.
Referenced by clang::ento::SimpleConstraintManager::assumeInclusiveRange(), clang::ento::StoreManager::CastRetrievedVal(), clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::retaincountchecker::RetainCountChecker::checkSummary(), clang::ento::SValBuilder::evalCast(), getAsSymbolicExpression(), getAsSymExpr(), clang::ento::ProgramState::getSValAsScalarOrLoc(), clang::ento::BugReport::isInteresting(), clang::ento::ProgramState::isNull(), clang::ento::BugReport::markInteresting(), clang::ento::retaincountchecker::RetainCountChecker::processObjCLiterals(), clang::ento::retaincountchecker::RetainCountChecker::processSummaryOfInlined(), and clang::ento::ScanReachableSymbols::scan().
const SymExpr * SVal::getAsSymbolicExpression | ( | ) | const |
getAsSymbolicExpression - If this Sval wraps a symbolic expression then return that expression.
Otherwise return NULL.
Definition at line 136 of file SVals.cpp.
References getAsSymbol(), and X.
Referenced by clang::ento::SValBuilder::evalIntegralCast(), getAsSymExpr(), and clang::ento::ScanReachableSymbols::scan().
const SymExpr * SVal::getAsSymExpr | ( | ) | const |
Definition at line 143 of file SVals.cpp.
References getAsSymbol(), and getAsSymbolicExpression().
Referenced by clang::ento::ProgramState::addPartialTaint(), clang::ento::SimpleConstraintManager::assume(), clang::ento::SimpleConstraintManager::assumeInclusiveRange(), and clang::ento::SValBuilder::makeSymExprValNN().
|
inline |
Definition at line 118 of file SVals.h.
Referenced by dumpToStream(), and clang::ento::SValVisitor< SValExplainer, std::string >::Visit().
SymbolRef SVal::getLocSymbolInBase | ( | ) | const |
|
inline |
Definition at line 117 of file SVals.h.
Referenced by operator==().
|
inline |
Definition at line 119 of file SVals.h.
Referenced by clang::ento::SimpleConstraintManager::assume(), clang::ento::SimpleConstraintManager::assumeInclusiveRange(), clang::ento::StoreManager::CastRetrievedVal(), clang::ento::NonLoc::dumpToStream(), clang::ento::Loc::dumpToStream(), and clang::ento::SValVisitor< SValExplainer, std::string >::Visit().
bool SVal::hasConjuredSymbol | ( | ) | const |
bool SVal::isConstant | ( | ) | const |
Definition at line 221 of file SVals.cpp.
Referenced by clang::ento::SValBuilder::evalCast(), clang::ento::ProgramState::isNull(), isZeroConstant(), and clang::ento::ExprEngine::VisitCast().
|
inline |
Definition at line 140 of file SVals.h.
Referenced by DereferenceInfo::DereferenceInfo(), clang::ento::SValBuilder::evalBinOp(), clang::ento::ExprEngine::evalLoad(), clang::ento::ExprEngine::evalStore(), clang::ento::FindUninitializedFields::FindUninitializedFields(), clang::ento::ExprEngine::processSwitch(), clang::ento::ExprEngine::VisitCast(), and clang::ento::ExprEngine::VisitObjCMessage().
|
inline |
Definition at line 136 of file SVals.h.
Referenced by clang::ento::ProgramState::assume(), clang::ento::ProgramState::assumeInBound(), clang::ento::ProgramState::assumeInclusiveRange(), clang::ento::EnvironmentManager::bindExpr(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), DereferenceInfo::DereferenceInfo(), clang::ento::SValBuilder::evalBinOp(), clang::ento::retaincountchecker::RetainCountChecker::evalCall(), clang::ento::ExprEngine::evalLoad(), clang::ento::ExprEngine::getInitialState(), clang::ento::ExprEngine::handleLValueBitCast(), clang::ento::ExprEngine::processBranch(), clang::ento::ExprEngine::VisitBinaryOperator(), clang::ento::ExprEngine::VisitCast(), clang::ento::ExprEngine::VisitCXXNewExpr(), and clang::ento::ExprEngine::VisitDeclStmt().
|
inline |
Definition at line 144 of file SVals.h.
Referenced by clang::ento::ProgramState::assumeInBound(), clang::ento::StoreManager::CastRetrievedVal(), clang::ento::SValBuilder::convertToArrayIndex(), clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::ento::SValBuilder::evalCast(), clang::ento::StoreManager::getLValueElement(), clang::ento::ExprEngine::processBranch(), clang::ento::ExprEngine::ProcessInitializer(), and clang::ento::ExprEngine::VisitUnaryOperator().
|
inline |
Definition at line 148 of file SVals.h.
References dump(), and clang::ento::OS.
Referenced by clang::ento::ExprEngine::evalBinOp(), clang::ento::ExprEngine::evalComplement(), clang::ento::ExprEngine::evalLoad(), and clang::ento::ExprEngine::evalMinus().
bool SVal::isZeroConstant | ( | ) | const |
Definition at line 233 of file SVals.cpp.
References isConstant().
Referenced by clang::ento::SValBuilder::evalCast(), clang::ento::FieldRegion::getExtent(), clang::ento::ProgramState::isNull(), and clang::ento::ExprEngine::VisitCast().
Definition at line 128 of file SVals.h.
References Data, and getRawKind().
|
inline |
Definition at line 123 of file SVals.h.
Referenced by clang::ento::BasicValueFactory::getPersistentSValPair(), clang::ento::BasicValueFactory::getPersistentSValWithData(), and clang::ento::SymbolicRegion::Profile().
|
inline |
Definition at line 196 of file SVals.h.
References clang::ento::SymExpr::symbol_begin().
|
inline |
Definition at line 204 of file SVals.h.
References clang::ento::SymExpr::symbol_end().
|
protected |
Definition at line 86 of file SVals.h.
Referenced by clang::ento::nonloc::LazyCompoundVal::getRegion(), clang::ento::nonloc::LazyCompoundVal::getStore(), and operator==().
|
protected |