clang 17.0.0git
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
clang::ento::SVal Class Reference

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"

Inheritance diagram for clang::ento::SVal:
Inheritance graph
[legend]

Public Types

enum  BaseKind
 
enum  { BaseBits = 2 , BaseMask = 0b11 }
 

Public Member Functions

 SVal ()=default
 
template<typename T >
castAs () const
 Convert to the specified SVal type, asserting that this SVal is of the desired type.
 
template<typename T >
std::optional< T > getAs () const
 Convert to the specified SVal type, returning std::nullopt if this SVal is not of the desired type.
 
unsigned getRawKind () const
 
BaseKind getBaseKind () const
 
unsigned getSubKind () const
 
void Profile (llvm::FoldingSetNodeID &ID) const
 
bool operator== (SVal R) const
 
bool operator!= (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
 
const FunctionDeclgetAsFunctionDecl () const
 getAsFunctionDecl - If this SVal is a MemRegionVal and wraps a CodeTextRegion wrapping a FunctionDecl, return that FunctionDecl.
 
SymbolRef getAsLocSymbol (bool IncludeBaseRegions=false) const
 If this SVal is a location and wraps a symbol, return that SymbolRef.
 
SymbolRef getLocSymbolInBase () const
 Get the symbol in the SVal or its base region.
 
SymbolRef getAsSymbol (bool IncludeBaseRegions=false) const
 If this SVal wraps a symbol return that SymbolRef.
 
const llvm::APSInt * getAsInteger () const
 If this SVal is loc::ConcreteInt or nonloc::ConcreteInt, return a pointer to APSInt which is held in it.
 
const MemRegiongetAsRegion () const
 
void printJson (raw_ostream &Out, bool AddQuotes) const
 printJson - Pretty-prints in JSON format.
 
void dumpToStream (raw_ostream &OS) const
 
void dump () const
 
SymExpr::symbol_iterator symbol_begin () const
 
SymExpr::symbol_iterator symbol_end () const
 
QualType getType (const ASTContext &) const
 Try to get a reasonable type for the given value.
 

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).
 

Detailed Description

SVal - This represents a symbolic expression, which can be either an L-value or an R-value.

Definition at line 72 of file SVals.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
BaseBits 
BaseMask 

Definition at line 80 of file SVals.h.

◆ BaseKind

Definition at line 74 of file SVals.h.

Constructor & Destructor Documentation

◆ SVal() [1/3]

clang::ento::SVal::SVal ( const void *  d,
bool  isLoc,
unsigned  ValKind 
)
inlineexplicitprotected

Definition at line 89 of file SVals.h.

◆ SVal() [2/3]

clang::ento::SVal::SVal ( BaseKind  k,
const void *  D = nullptr 
)
inlineexplicitprotected

Definition at line 92 of file SVals.h.

◆ SVal() [3/3]

clang::ento::SVal::SVal ( )
explicitdefault

Member Function Documentation

◆ castAs()

template<typename T >
T clang::ento::SVal::castAs ( ) const
inline

◆ dump()

LLVM_DUMP_METHOD void SVal::dump ( ) const

Definition at line 269 of file SVals.cpp.

◆ dumpToStream()

void SVal::dumpToStream ( raw_ostream &  OS) const

Definition at line 280 of file SVals.cpp.

◆ getAs()

template<typename T >
std::optional< T > clang::ento::SVal::getAs ( ) const
inline

Convert to the specified SVal type, returning std::nullopt if this SVal is not of the desired type.

Definition at line 103 of file SVals.h.

Referenced by clang::ento::iterator::advancePosition(), assumeCollectionNonEmpty(), clang::ento::SimpleConstraintManager::assumeInternal(), clang::ento::iterator::assumeNoOverflow(), clang::ento::ProgramState::bindLoc(), checkCollectionNonNil(), checkValueAtLValForInvariantViolation(), collectSubRegionBindings(), compareValueToThreshold(), clang::ento::SValBuilder::convertToArrayIndex(), clang::ento::CoreEngine::dispatchWorkItem(), clang::ento::SValBuilder::evalBinOp(), clang::ento::retaincountchecker::RetainCountChecker::evalCall(), clang::ento::SValBuilder::evalUnaryOp(), clang::ento::ElementRegion::getAsArrayOffset(), getAsPointeeSymbol(), clang::ento::MemRegion::getDescriptiveName(), getFuchsiaHandleSymbols(), clang::ento::ExprEngine::getInitialState(), clang::ento::iterator::getIteratorPosition(), clang::ento::ProgramState::getLValue(), clang::ento::StackHintGeneratorForSymbol::getMessage(), getReceiverNullability(), getSimplifiedOffsets(), hasVisibleUpdate(), isInvariantBreak(), clang::ento::SValBuilder::makeSymExprValNN(), parameterTypeFromSVal(), populateObjCForDestinationSet(), clang::ento::ExprEngine::ProcessInitializer(), clang::ento::ExprEngine::processSwitch(), clang::ento::ScanReachableSymbols::scan(), clang::ento::iterator::setIteratorPosition(), showBRDefaultDiagnostics(), showBRDiagnostics(), showBRParamDiagnostics(), updateOutParameters(), clang::ento::ExprEngine::VisitCXXNewExpr(), and clang::ento::SValExplainer::VisitElementRegion().

◆ getAsFunctionDecl()

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 46 of file SVals.cpp.

References clang::ento::MemRegion::getAs(), and X.

Referenced by clang::ento::CheckerContext::getCalleeDecl(), clang::ento::SimpleFunctionCall::getDecl(), and clang::ento::CXXInstanceCall::getDecl().

◆ getAsInteger()

const llvm::APSInt * SVal::getAsInteger ( ) const

If this SVal is loc::ConcreteInt or nonloc::ConcreteInt, return a pointer to APSInt which is held in it.

Otherwise, return nullptr.

Definition at line 112 of file SVals.cpp.

Referenced by clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::ProcessDeleteDtor(), and clang::ento::ExprEngine::ProcessMemberDtor().

◆ getAsLocSymbol()

SymbolRef SVal::getAsLocSymbol ( bool  IncludeBaseRegions = false) const

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.

Parameters
IncludeBaseRegionsThe 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 68 of file SVals.cpp.

References getAsRegion(), and clang::ento::MemRegion::getSymbolicBase().

Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkPostCall(), getAsSymbol(), clang::ento::StackHintGeneratorForSymbol::getMessage(), clang::ento::StoreManager::FindUniqueBinding::HandleBinding(), and updateOutParameters().

◆ getAsRegion()

const MemRegion * SVal::getAsRegion ( ) const

◆ getAsSymbol()

SymbolRef SVal::getAsSymbol ( bool  IncludeBaseRegions = false) const

◆ getBaseKind()

BaseKind clang::ento::SVal::getBaseKind ( ) const
inline

Definition at line 108 of file SVals.h.

References BaseMask, and Kind.

◆ getLocSymbolInBase()

SymbolRef SVal::getLocSymbolInBase ( ) const

Get the symbol in the SVal or its base region.

Definition at line 80 of file SVals.cpp.

References X.

◆ getRawKind()

unsigned clang::ento::SVal::getRawKind ( ) const
inline

Definition at line 107 of file SVals.h.

References Kind.

Referenced by isUndef(), isUnknown(), isUnknownOrUndef(), isValid(), operator==(), and Profile().

◆ getSubKind()

unsigned clang::ento::SVal::getSubKind ( ) const
inline

Definition at line 109 of file SVals.h.

References BaseBits, and Kind.

Referenced by assertEqualBitWidths().

◆ getType()

QualType SVal::getType ( const ASTContext Context) const

Try to get a reasonable type for the given value.

Returns
The best approximation of the value type or Null. In theory, all symbolic values should be typed, but this function is still a WIP and might have a few blind spots.
Note
This function should not be used when the user has access to the bound expression AST node as well, since AST always has exact types.
Loc values are interpreted as pointer rvalues for the purposes of this method.

Definition at line 184 of file SVals.cpp.

Referenced by clang::ento::iterator::advancePosition(), assertEqualBitWidths(), checkParamsForPreconditionViolation(), checkSelfIvarsForInvariantViolation(), and clang::ento::ExprEngine::processCallExit().

◆ isConstant() [1/2]

bool SVal::isConstant ( ) const

◆ isConstant() [2/2]

bool SVal::isConstant ( int  I) const

Definition at line 253 of file SVals.cpp.

◆ isUndef()

bool clang::ento::SVal::isUndef ( ) const
inline

◆ isUnknown()

bool clang::ento::SVal::isUnknown ( ) const
inline

◆ isUnknownOrUndef()

bool clang::ento::SVal::isUnknownOrUndef ( ) const
inline

◆ isValid()

bool clang::ento::SVal::isValid ( ) const
inline

◆ isZeroConstant()

bool SVal::isZeroConstant ( ) const

◆ operator!=()

bool clang::ento::SVal::operator!= ( SVal  R) const
inline

Definition at line 122 of file SVals.h.

◆ operator==()

bool clang::ento::SVal::operator== ( SVal  R) const
inline

Definition at line 118 of file SVals.h.

References Data, and getRawKind().

◆ printJson()

void SVal::printJson ( raw_ostream &  Out,
bool  AddQuotes 
) const

printJson - Pretty-prints in JSON format.

Definition at line 271 of file SVals.cpp.

References clang::JsonFormat().

◆ Profile()

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

Definition at line 113 of file SVals.h.

References Data, and getRawKind().

Referenced by clang::ento::BasicValueFactory::getPersistentSValPair().

◆ symbol_begin()

SymExpr::symbol_iterator clang::ento::SVal::symbol_begin ( ) const
inline

◆ symbol_end()

SymExpr::symbol_iterator clang::ento::SVal::symbol_end ( ) const
inline

Member Data Documentation

◆ Data

const void* clang::ento::SVal::Data = nullptr
protected

◆ Kind

unsigned clang::ento::SVal::Kind = 0
protected

The lowest 2 bits are a BaseKind (0 – 3).

The higher bits are an unsigned "kind" value.

Definition at line 87 of file SVals.h.

Referenced by getBaseKind(), getRawKind(), and getSubKind().


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