clang 22.0.0git
clang::ento::MemRegion Class Referenceabstract

MemRegion - The root abstract class for all memory regions. More...

#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"

Inheritance diagram for clang::ento::MemRegion:
[legend]

Public Types

enum  Kind

Public Member Functions

ASTContextgetContext () const
virtual void Profile (llvm::FoldingSetNodeID &ID) const =0
virtual MemRegionManagergetMemRegionManager () const =0
LLVM_ATTRIBUTE_RETURNS_NONNULL const MemSpaceRegiongetRawMemorySpace () const
 Deprecated.
template<class MemSpace>
const MemSpace * getRawMemorySpaceAs () const
 Deprecated. Use getMemorySpace(ProgramStateRef) instead.
LLVM_ATTRIBUTE_RETURNS_NONNULL const MemSpaceRegiongetMemorySpace (ProgramStateRef State) const
 Returns the most specific memory space for this memory region in the given ProgramStateRef.
template<class MemSpace>
const MemSpace * getMemorySpaceAs (ProgramStateRef State) const
template<typename... MemorySpaces>
bool hasMemorySpace (ProgramStateRef State) const
ProgramStateRef setMemorySpace (ProgramStateRef State, const MemSpaceRegion *Space) const
 Set the dynamically deduced memory space of a MemRegion that currently has UnknownSpaceRegion.
LLVM_ATTRIBUTE_RETURNS_NONNULL const MemRegiongetBaseRegion () const
LLVM_ATTRIBUTE_RETURNS_NONNULL const MemRegiongetMostDerivedObjectRegion () const
 Recursively retrieve the region of the most derived class instance of regions of C++ base class instances.
virtual bool isSubRegionOf (const MemRegion *R) const
 Check if the region is a subregion of the given region.
LLVM_ATTRIBUTE_RETURNS_NONNULL const MemRegionStripCasts (bool StripBaseAndDerivedCasts=true) const
const SymbolicRegiongetSymbolicBase () const
 If this is a symbolic region, returns the region.
RegionOffset getAsOffset () const
 Compute the offset within the top level memory object.
std::string getString () const
 Get a string representation of a region for debug use.
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.
virtual void printPretty (raw_ostream &os) const
 Print the region for use in diagnostics.
virtual bool canPrintPrettyAsExpr () const
 Returns true if this region's textual representation can be used as part of a larger expression.
virtual void printPrettyAsExpr (raw_ostream &os) const
 Print the region as expression.
Kind getKind () const
StringRef getKindStr () const
template<typename RegionTy>
const RegionTy * getAs () const
template<typename RegionTy>
LLVM_ATTRIBUTE_RETURNS_NONNULL const RegionTy * castAs () const
virtual bool isBoundable () const
std::string getDescriptiveName (bool UseQuotes=true) const
 Get descriptive name for memory region.
SourceRange sourceRange () const
 Retrieve source range from memory region.

Protected Member Functions

 MemRegion (Kind k)
virtual ~MemRegion ()

Detailed Description

MemRegion - The root abstract class for all memory regions.

Definition at line 98 of file MemRegion.h.

Member Enumeration Documentation

◆ Kind

Definition at line 100 of file MemRegion.h.

Constructor & Destructor Documentation

◆ MemRegion()

◆ ~MemRegion()

MemRegion::~MemRegion ( )
protectedvirtualdefault

Member Function Documentation

◆ canPrintPretty()

bool MemRegion::canPrintPretty ( ) const
virtual

Returns true if this region can be printed in a user-friendly way.

Reimplemented in clang::ento::FieldRegion.

Definition at line 634 of file MemRegion.cpp.

References canPrintPrettyAsExpr().

Referenced by checkAndPrettyPrintRegion(), printPretty(), printReferrer(), showBRDefaultDiagnostics(), showBRDiagnostics(), and showBRParamDiagnostics().

◆ canPrintPrettyAsExpr()

bool MemRegion::canPrintPrettyAsExpr ( ) const
virtual

Returns true if this region's textual representation can be used as part of a larger expression.

Reimplemented in clang::ento::CXXBaseObjectRegion, clang::ento::CXXDerivedObjectRegion, clang::ento::FieldRegion, clang::ento::NonParamVarRegion, clang::ento::ObjCIvarRegion, and clang::ento::ParamVarRegion.

Definition at line 638 of file MemRegion.cpp.

Referenced by canPrintPretty(), and getDescriptiveName().

◆ castAs()

template<typename RegionTy>
LLVM_ATTRIBUTE_RETURNS_NONNULL const RegionTy * clang::ento::MemRegion::castAs ( ) const

Definition at line 1424 of file MemRegion.h.

References clang::cast().

◆ dump()

LLVM_DUMP_METHOD void MemRegion::dump ( ) const

Definition at line 474 of file MemRegion.cpp.

References dumpToStream().

◆ dumpToStream()

◆ getAs()

◆ getAsOffset()

RegionOffset MemRegion::getAsOffset ( ) const

Compute the offset within the top level memory object.

Definition at line 1735 of file MemRegion.cpp.

References calculateOffset().

◆ getBaseRegion()

◆ getContext()

◆ getDescriptiveName()

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

Parameters
UseQuotesSet if the name should be quoted.
Returns
variable name for memory region

Definition at line 727 of file MemRegion.cpp.

References canPrintPrettyAsExpr(), getAs(), clang::ento::SVal::getAs(), getDescriptiveName(), clang::ento::ElementRegion::getIndex(), clang::ento::SubRegion::getSuperRegion(), MemRegion(), and printPrettyAsExpr().

Referenced by getDescriptiveName(), getRegionName(), clang::ento::mpi::MPIBugReporter::reportDoubleNonblocking(), clang::ento::mpi::MPIBugReporter::reportMissingWait(), and clang::ento::mpi::MPIBugReporter::reportUnmatchedWait().

◆ getKind()

Kind clang::ento::MemRegion::getKind ( ) const
inline

Definition at line 203 of file MemRegion.h.

Referenced by calculateOffset(), clang::ento::StoreManager::castRegion(), clang::ento::AllocaRegion::classof(), clang::ento::BlockCodeRegion::classof(), clang::ento::BlockDataRegion::classof(), clang::ento::CodeSpaceRegion::classof(), clang::ento::CodeTextRegion::classof(), clang::ento::CompoundLiteralRegion::classof(), clang::ento::CXXBaseObjectRegion::classof(), clang::ento::CXXDerivedObjectRegion::classof(), clang::ento::CXXLifetimeExtendedObjectRegion::classof(), clang::ento::CXXTempObjectRegion::classof(), clang::ento::CXXThisRegion::classof(), clang::ento::DeclRegion::classof(), clang::ento::ElementRegion::classof(), clang::ento::FieldRegion::classof(), clang::ento::FunctionCodeRegion::classof(), clang::ento::GlobalImmutableSpaceRegion::classof(), clang::ento::GlobalInternalSpaceRegion::classof(), clang::ento::GlobalsSpaceRegion::classof(), clang::ento::GlobalSystemSpaceRegion::classof(), clang::ento::HeapSpaceRegion::classof(), clang::ento::MemSpaceRegion::classof(), clang::ento::NonParamVarRegion::classof(), clang::ento::NonStaticGlobalSpaceRegion::classof(), clang::ento::ObjCIvarRegion::classof(), clang::ento::ObjCStringRegion::classof(), clang::ento::ParamVarRegion::classof(), clang::ento::StackArgumentsSpaceRegion::classof(), clang::ento::StackLocalsSpaceRegion::classof(), clang::ento::StackSpaceRegion::classof(), clang::ento::StaticGlobalSpaceRegion::classof(), clang::ento::StringRegion::classof(), clang::ento::SubRegion::classof(), clang::ento::SymbolicRegion::classof(), clang::ento::TypedRegion::classof(), clang::ento::TypedValueRegion::classof(), clang::ento::UnknownSpaceRegion::classof(), clang::ento::VarRegion::classof(), getBaseRegion(), getKindStr(), clang::ento::MemSpaceRegion::Profile(), clang::ento::StackSpaceRegion::Profile(), clang::ento::StaticGlobalSpaceRegion::Profile(), StripCasts(), and clang::ento::MemRegionVisitor< ImplClass, RetTy >::Visit().

◆ getKindStr()

StringRef MemRegion::getKindStr ( ) const

Definition at line 642 of file MemRegion.cpp.

References getKind().

◆ getMemorySpace()

const MemSpaceRegion * MemRegion::getMemorySpace ( ProgramStateRef State) const
nodiscard

Returns the most specific memory space for this memory region in the given ProgramStateRef.

We may infer a more accurate memory space for unknown space regions and associate this in the State.

Definition at line 1397 of file MemRegion.cpp.

References getBaseRegion(), getRawMemorySpace(), clang::isa(), and MemRegion().

Referenced by getMemorySpaceAs(), getStackOrGlobalSpaceRegion(), hasMemorySpace(), and clang::ento::ExprEngine::processPointerEscapedOnBind().

◆ getMemorySpaceAs()

template<class MemSpace>
const MemSpace * clang::ento::MemRegion::getMemorySpaceAs ( ProgramStateRef State) const
inlinenodiscard

Definition at line 143 of file MemRegion.h.

References getMemorySpace().

Referenced by GetAllocationSite(), and isInitializationOfVar().

◆ getMemRegionManager()

virtual MemRegionManager & clang::ento::MemRegion::getMemRegionManager ( ) const
pure virtual

◆ getMostDerivedObjectRegion()

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 1442 of file MemRegion.cpp.

References MemRegion().

◆ getRawMemorySpace()

const MemSpaceRegion * MemRegion::getRawMemorySpace ( ) const
nodiscard

Deprecated.

Gets the 'raw' memory space of a memory region's base region. If the MemRegion is originally associated with Unknown memspace, then the State may have a more accurate memspace for this region. Use getMemorySpace(ProgramStateRef) instead.

Definition at line 1385 of file MemRegion.cpp.

References clang::cast(), and MemRegion().

Referenced by getMemorySpace(), getRawMemorySpaceAs(), clang::ento::CXXLifetimeExtendedObjectRegion::getStackFrame(), clang::ento::CXXTempObjectRegion::getStackFrame(), and clang::ento::VarRegion::getStackFrame().

◆ getRawMemorySpaceAs()

template<class MemSpace>
const MemSpace * clang::ento::MemRegion::getRawMemorySpaceAs ( ) const
inlinenodiscard

Deprecated. Use getMemorySpace(ProgramStateRef) instead.

Definition at line 132 of file MemRegion.h.

References getRawMemorySpace().

◆ getString()

std::string MemRegion::getString ( ) const

Get a string representation of a region for debug use.

Definition at line 478 of file MemRegion.cpp.

References dumpToStream(), and s.

Referenced by clang::ento::SValExplainer::VisitStringRegion().

◆ getSymbolicBase()

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 1480 of file MemRegion.cpp.

◆ hasMemorySpace()

template<typename... MemorySpaces>
bool clang::ento::MemRegion::hasMemorySpace ( ProgramStateRef State) const
inlinenodiscard

◆ isBoundable()

◆ isSubRegionOf()

bool MemRegion::isSubRegionOf ( const MemRegion * R) const
virtual

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 1449 of file MemRegion.cpp.

References MemRegion().

Referenced by isAnyBaseRegionReported(), and clang::ento::UndefOrNullArgVisitor::VisitNode().

◆ printPretty()

void MemRegion::printPretty ( raw_ostream & os) const
virtual

Print the region for use in diagnostics.

Reimplemented in clang::ento::FieldRegion.

Definition at line 653 of file MemRegion.cpp.

References canPrintPretty(), and printPrettyAsExpr().

Referenced by checkAndPrettyPrintRegion(), printReferrer(), showBRDefaultDiagnostics(), showBRDiagnostics(), and showBRParamDiagnostics().

◆ printPrettyAsExpr()

void MemRegion::printPrettyAsExpr ( raw_ostream & os) const
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::CXXBaseObjectRegion, clang::ento::CXXDerivedObjectRegion, clang::ento::FieldRegion, clang::ento::NonParamVarRegion, clang::ento::ObjCIvarRegion, and clang::ento::ParamVarRegion.

Definition at line 660 of file MemRegion.cpp.

Referenced by getDescriptiveName(), and printPretty().

◆ Profile()

◆ setMemorySpace()

ProgramStateRef MemRegion::setMemorySpace ( ProgramStateRef State,
const MemSpaceRegion * Space ) const
nodiscard

Set the dynamically deduced memory space of a MemRegion that currently has UnknownSpaceRegion.

Space shouldn't be UnknownSpaceRegion.

Definition at line 1408 of file MemRegion.cpp.

References getBaseRegion(), clang::isa(), and MemRegion().

◆ sourceRange()

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.

Returns
source range for declaration retrieved from memory region

Definition at line 789 of file MemRegion.cpp.

References getBaseRegion().

Referenced by clang::ento::mpi::MPIBugReporter::reportDoubleNonblocking(), clang::ento::mpi::MPIBugReporter::reportMissingWait(), and clang::ento::mpi::MPIBugReporter::reportUnmatchedWait().

◆ StripCasts()


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