clang
17.0.0git
|
MemRegion - The root abstract class for all memory regions. More...
#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
Public Types | |
enum | Kind |
Public Member Functions | |
ASTContext & | getContext () const |
virtual void | Profile (llvm::FoldingSetNodeID &ID) const =0 |
virtual MemRegionManager & | getMemRegionManager () const =0 |
const LLVM_ATTRIBUTE_RETURNS_NONNULL MemSpaceRegion * | getMemorySpace () const |
const LLVM_ATTRIBUTE_RETURNS_NONNULL MemRegion * | getBaseRegion () const |
const LLVM_ATTRIBUTE_RETURNS_NONNULL MemRegion * | getMostDerivedObjectRegion () const |
Recursively retrieve the region of the most derived class instance of regions of C++ base class instances. More... | |
virtual bool | isSubRegionOf (const MemRegion *R) const |
Check if the region is a subregion of the given region. More... | |
const LLVM_ATTRIBUTE_RETURNS_NONNULL MemRegion * | StripCasts (bool StripBaseAndDerivedCasts=true) const |
const SymbolicRegion * | getSymbolicBase () const |
If this is a symbolic region, returns the region. More... | |
bool | hasGlobalsOrParametersStorage () const |
bool | hasStackStorage () const |
bool | hasStackNonParametersStorage () const |
bool | hasStackParametersStorage () const |
RegionOffset | getAsOffset () const |
Compute the offset within the top level memory object. More... | |
std::string | getString () const |
Get a string representation of a region for debug use. More... | |
virtual void | dumpToStream (raw_ostream &os) const |
void | dump () const |
virtual bool | canPrintPretty () const |
Returns true if this region can be printed in a user-friendly way. More... | |
virtual void | printPretty (raw_ostream &os) const |
Print the region for use in diagnostics. More... | |
virtual bool | canPrintPrettyAsExpr () const |
Returns true if this region's textual representation can be used as part of a larger expression. More... | |
virtual void | printPrettyAsExpr (raw_ostream &os) const |
Print the region as expression. More... | |
Kind | getKind () const |
template<typename RegionTy > | |
const RegionTy * | getAs () const |
template<typename RegionTy > | |
const LLVM_ATTRIBUTE_RETURNS_NONNULL RegionTy * | castAs () const |
virtual bool | isBoundable () const |
std::string | getDescriptiveName (bool UseQuotes=true) const |
Get descriptive name for memory region. More... | |
SourceRange | sourceRange () const |
Retrieve source range from memory region. More... | |
Protected Member Functions | |
MemRegion (Kind k) | |
virtual | ~MemRegion () |
MemRegion - The root abstract class for all memory regions.
Definition at line 95 of file MemRegion.h.
Definition at line 97 of file MemRegion.h.
|
inlineprotected |
Definition at line 108 of file MemRegion.h.
|
protectedvirtualdefault |
|
virtual |
Returns true if this region can be printed in a user-friendly way.
Reimplemented in clang::ento::FieldRegion.
Definition at line 593 of file MemRegion.cpp.
References canPrintPrettyAsExpr().
Referenced by printPretty().
|
virtual |
Returns true if this region's textual representation can be used as part of a larger expression.
Reimplemented in clang::ento::CXXDerivedObjectRegion, clang::ento::CXXBaseObjectRegion, clang::ento::ObjCIvarRegion, clang::ento::FieldRegion, clang::ento::ParamVarRegion, and clang::ento::NonParamVarRegion.
Definition at line 597 of file MemRegion.cpp.
Referenced by canPrintPretty(), clang::ento::FieldRegion::canPrintPrettyAsExpr(), clang::ento::CXXBaseObjectRegion::canPrintPrettyAsExpr(), clang::ento::CXXDerivedObjectRegion::canPrintPrettyAsExpr(), and getDescriptiveName().
const LLVM_ATTRIBUTE_RETURNS_NONNULL RegionTy * clang::ento::MemRegion::castAs |
Definition at line 1345 of file MemRegion.h.
LLVM_DUMP_METHOD void MemRegion::dump | ( | ) | const |
Definition at line 441 of file MemRegion.cpp.
References dumpToStream().
|
virtual |
Reimplemented in clang::ento::CXXDerivedObjectRegion, clang::ento::CXXBaseObjectRegion, clang::ento::CXXTempObjectRegion, clang::ento::ElementRegion, clang::ento::ObjCIvarRegion, clang::ento::FieldRegion, clang::ento::CXXThisRegion, clang::ento::ParamVarRegion, clang::ento::NonParamVarRegion, clang::ento::CompoundLiteralRegion, clang::ento::ObjCStringRegion, clang::ento::StringRegion, clang::ento::SymbolicRegion, clang::ento::BlockDataRegion, clang::ento::BlockCodeRegion, clang::ento::FunctionCodeRegion, clang::ento::AllocaRegion, clang::ento::StackArgumentsSpaceRegion, clang::ento::StackLocalsSpaceRegion, clang::ento::UnknownSpaceRegion, clang::ento::HeapSpaceRegion, clang::ento::GlobalInternalSpaceRegion, clang::ento::GlobalImmutableSpaceRegion, clang::ento::GlobalSystemSpaceRegion, clang::ento::StaticGlobalSpaceRegion, and clang::ento::CodeSpaceRegion.
Definition at line 452 of file MemRegion.cpp.
Referenced by dump(), getString(), and clang::ento::operator<<().
const RegionTy * clang::ento::MemRegion::getAs |
Definition at line 1337 of file MemRegion.h.
Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkRegionChanges(), dereference(), clang::ento::SVal::getAsFunctionDecl(), getConstructedRegion(), and getDescriptiveName().
RegionOffset MemRegion::getAsOffset | ( | ) | const |
Compute the offset within the top level memory object.
Definition at line 1614 of file MemRegion.cpp.
References calculateOffset().
const MemRegion * MemRegion::getBaseRegion | ( | ) | const |
Definition at line 1307 of file MemRegion.cpp.
References getKind().
Referenced by clang::ento::CXXInstanceCall::getExtraInvalidatedValues(), clang::ento::PathSensitiveBugReport::getInterestingnessKind(), clang::ento::PathSensitiveBugReport::markNotInteresting(), clang::ento::ExprEngine::ProcessAutomaticObjDtor(), clang::ento::ExprEngine::processPointerEscapedOnBind(), clang::ento::ScanReachableSymbols::scan(), and sourceRange().
|
inline |
Definition at line 1561 of file MemRegion.h.
References clang::ento::MemRegionManager::getContext(), and getMemRegionManager().
Referenced by clang::ento::AllocaRegion::dumpToStream(), clang::ento::StringRegion::dumpToStream(), clang::ento::ObjCStringRegion::dumpToStream(), clang::ento::CompoundLiteralRegion::dumpToStream(), clang::ento::CXXTempObjectRegion::dumpToStream(), clang::ento::ElementRegion::getAsArrayOffset(), clang::ento::MemRegionManager::getElementRegionWithSuper(), clang::ento::TypedValueRegion::getLocationType(), and clang::ento::FunctionCodeRegion::getLocationType().
std::string MemRegion::getDescriptiveName | ( | bool | UseQuotes = true | ) | const |
Get descriptive name for memory region.
The name is obtained from the variable/field declaration retrieved from the memory region. Regions that point to an element of an array are returned as: "arr[0]". Regions that point to a struct are returned as: "st.var".
UseQuotes | Set if the name should be quoted. |
Definition at line 675 of file MemRegion.cpp.
References canPrintPrettyAsExpr(), clang::ento::SVal::getAs(), getAs(), getDescriptiveName(), clang::ento::ElementRegion::getIndex(), clang::ento::SubRegion::getSuperRegion(), printPrettyAsExpr(), and string().
Referenced by getDescriptiveName(), clang::ento::mpi::MPIBugReporter::reportDoubleNonblocking(), clang::ento::mpi::MPIBugReporter::reportMissingWait(), and clang::ento::mpi::MPIBugReporter::reportUnmatchedWait().
|
inline |
Definition at line 173 of file MemRegion.h.
Referenced by clang::ento::StoreManager::castRegion(), clang::ento::MemSpaceRegion::classof(), clang::ento::CodeSpaceRegion::classof(), clang::ento::GlobalsSpaceRegion::classof(), clang::ento::StaticGlobalSpaceRegion::classof(), clang::ento::NonStaticGlobalSpaceRegion::classof(), clang::ento::GlobalSystemSpaceRegion::classof(), clang::ento::GlobalImmutableSpaceRegion::classof(), clang::ento::GlobalInternalSpaceRegion::classof(), clang::ento::HeapSpaceRegion::classof(), clang::ento::UnknownSpaceRegion::classof(), clang::ento::StackSpaceRegion::classof(), clang::ento::StackLocalsSpaceRegion::classof(), clang::ento::StackArgumentsSpaceRegion::classof(), clang::ento::SubRegion::classof(), clang::ento::AllocaRegion::classof(), clang::ento::TypedRegion::classof(), clang::ento::TypedValueRegion::classof(), clang::ento::CodeTextRegion::classof(), clang::ento::FunctionCodeRegion::classof(), clang::ento::BlockCodeRegion::classof(), clang::ento::BlockDataRegion::classof(), clang::ento::SymbolicRegion::classof(), clang::ento::StringRegion::classof(), clang::ento::ObjCStringRegion::classof(), clang::ento::CompoundLiteralRegion::classof(), clang::ento::DeclRegion::classof(), clang::ento::VarRegion::classof(), clang::ento::NonParamVarRegion::classof(), clang::ento::ParamVarRegion::classof(), clang::ento::CXXThisRegion::classof(), clang::ento::FieldRegion::classof(), clang::ento::ObjCIvarRegion::classof(), clang::ento::ElementRegion::classof(), clang::ento::CXXTempObjectRegion::classof(), clang::ento::CXXBaseObjectRegion::classof(), clang::ento::CXXDerivedObjectRegion::classof(), getBaseRegion(), clang::ento::MemSpaceRegion::Profile(), clang::ento::StaticGlobalSpaceRegion::Profile(), clang::ento::StackSpaceRegion::Profile(), StripCasts(), and clang::ento::MemRegionVisitor< SValExplainer, std::string >::Visit().
const MemSpaceRegion * MemRegion::getMemorySpace | ( | ) | const |
Definition at line 1277 of file MemRegion.cpp.
Referenced by GetAllocationSite(), clang::ento::VarRegion::getStackFrame(), hasGlobalsOrParametersStorage(), hasStackNonParametersStorage(), hasStackParametersStorage(), hasStackStorage(), clang::ento::ExprEngine::processPointerEscapedOnBind(), and clang::ento::SValExplainer::VisitSymbolicRegion().
|
pure virtual |
Implemented in clang::ento::SubRegion, and clang::ento::MemSpaceRegion.
Referenced by getContext(), and clang::ento::SubRegion::getMemRegionManager().
const MemRegion * MemRegion::getMostDerivedObjectRegion | ( | ) | const |
Recursively retrieve the region of the most derived class instance of regions of C++ base class instances.
Definition at line 1327 of file MemRegion.cpp.
std::string MemRegion::getString | ( | ) | const |
Get a string representation of a region for debug use.
Definition at line 445 of file MemRegion.cpp.
References dumpToStream(), s, and string().
Referenced by clang::ento::SValExplainer::VisitStringRegion().
const SymbolicRegion * MemRegion::getSymbolicBase | ( | ) | const |
If this is a symbolic region, returns the region.
Otherwise, goes up the base chain looking for the first symbolic base region. It might return null.
Definition at line 1365 of file MemRegion.cpp.
Referenced by clang::ento::SVal::getAsLocSymbol().
bool MemRegion::hasGlobalsOrParametersStorage | ( | ) | const |
Definition at line 1301 of file MemRegion.cpp.
References getMemorySpace().
bool MemRegion::hasStackNonParametersStorage | ( | ) | const |
Definition at line 1293 of file MemRegion.cpp.
References getMemorySpace().
bool MemRegion::hasStackParametersStorage | ( | ) | const |
Definition at line 1297 of file MemRegion.cpp.
References getMemorySpace().
bool MemRegion::hasStackStorage | ( | ) | const |
Definition at line 1289 of file MemRegion.cpp.
References getMemorySpace().
Referenced by shouldEscapeRegion().
|
inlinevirtual |
Reimplemented in clang::ento::CompoundLiteralRegion, clang::ento::ObjCStringRegion, clang::ento::StringRegion, clang::ento::SymbolicRegion, clang::ento::CodeTextRegion, clang::ento::TypedRegion, clang::ento::AllocaRegion, and clang::ento::MemSpaceRegion.
Definition at line 179 of file MemRegion.h.
Referenced by clang::ento::StoreManager::castRegion(), and clang::ento::ProgramState::getSValAsScalarOrLoc().
Check if the region is a subregion of the given region.
Each region is a subregion of itself.
Reimplemented in clang::ento::SubRegion.
Definition at line 1334 of file MemRegion.cpp.
Referenced by clang::ento::UndefOrNullArgVisitor::VisitNode().
|
virtual |
Print the region for use in diagnostics.
Reimplemented in clang::ento::FieldRegion.
Definition at line 601 of file MemRegion.cpp.
References canPrintPretty(), and printPrettyAsExpr().
|
virtual |
Print the region as expression.
When this region represents a subexpression, the method is for printing an expression containing it.
Reimplemented in clang::ento::CXXDerivedObjectRegion, clang::ento::CXXBaseObjectRegion, clang::ento::ObjCIvarRegion, clang::ento::FieldRegion, clang::ento::ParamVarRegion, and clang::ento::NonParamVarRegion.
Definition at line 608 of file MemRegion.cpp.
Referenced by getDescriptiveName(), printPretty(), clang::ento::FieldRegion::printPrettyAsExpr(), clang::ento::CXXBaseObjectRegion::printPrettyAsExpr(), and clang::ento::CXXDerivedObjectRegion::printPrettyAsExpr().
|
pure virtual |
Implemented in clang::ento::CXXDerivedObjectRegion, clang::ento::CXXBaseObjectRegion, clang::ento::CXXTempObjectRegion, clang::ento::ElementRegion, clang::ento::ObjCIvarRegion, clang::ento::FieldRegion, clang::ento::CXXThisRegion, clang::ento::ParamVarRegion, clang::ento::NonParamVarRegion, clang::ento::CompoundLiteralRegion, clang::ento::ObjCStringRegion, clang::ento::StringRegion, clang::ento::SymbolicRegion, clang::ento::BlockDataRegion, clang::ento::BlockCodeRegion, clang::ento::FunctionCodeRegion, clang::ento::AllocaRegion, clang::ento::StackSpaceRegion, clang::ento::StaticGlobalSpaceRegion, and clang::ento::MemSpaceRegion.
SourceRange MemRegion::sourceRange | ( | ) | const |
Retrieve source range from memory region.
The range retrieval is based on the decl obtained from the memory region. For a VarRegion the range of the base region is returned. For a FieldRegion the range of the field is returned. If no declaration is found, an empty source range is returned. The client is responsible for checking if the returned range is valid.
Definition at line 714 of file MemRegion.cpp.
References getBaseRegion().
Referenced by clang::ento::mpi::MPIBugReporter::reportDoubleNonblocking(), clang::ento::mpi::MPIBugReporter::reportMissingWait(), and clang::ento::mpi::MPIBugReporter::reportUnmatchedWait().
Definition at line 1342 of file MemRegion.cpp.
References getKind().
Referenced by clang::ento::ExprEngine::bindReturnValue(), clang::ento::StoreManager::castRegion(), clang::ento::retaincountchecker::RetainCountChecker::checkRegionChanges(), clang::ento::StoreManager::getLValueElement(), clang::ento::CXXInstanceCall::getRuntimeDefinition(), clang::ento::loc::MemRegionVal::stripCasts(), and clang::ento::UndefOrNullArgVisitor::VisitNode().