clang  8.0.0svn
Public Types | Public Member Functions | Protected Member Functions | List of all members
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:
Inheritance graph
Collaboration diagram for clang::ento::MemRegion:
Collaboration graph

Public Types

enum  Kind

Public Member Functions

ASTContextgetContext () const
virtual void Profile (llvm::FoldingSetNodeID &ID) const =0
virtual MemRegionManagergetMemRegionManager () const =0
const MemSpaceRegiongetMemorySpace () const
const MemRegiongetBaseRegion () const
const MemRegiongetMostDerivedObjectRegion () 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 MemRegionStripCasts (bool StripBaseAndDerivedCasts=true) const
const SymbolicRegiongetSymbolicBase () 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
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 ()

Detailed Description

MemRegion - The root abstract class for all memory regions.

Definition at line 94 of file MemRegion.h.

Member Enumeration Documentation

◆ Kind

Definition at line 96 of file MemRegion.h.

Constructor & Destructor Documentation

◆ MemRegion()

clang::ento::MemRegion::MemRegion ( Kind  k)

Definition at line 107 of file MemRegion.h.

References dump().

◆ ~MemRegion()

MemRegion::~MemRegion ( )

Member Function Documentation

◆ canPrintPretty()

bool MemRegion::canPrintPretty ( ) const

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

Reimplemented in clang::ento::FieldRegion.

Definition at line 585 of file MemRegion.cpp.

◆ canPrintPrettyAsExpr()

bool MemRegion::canPrintPrettyAsExpr ( ) const

◆ dump()

LLVM_DUMP_METHOD void MemRegion::dump ( ) const

Definition at line 444 of file MemRegion.cpp.

◆ dumpToStream()

void MemRegion::dumpToStream ( raw_ostream &  os) const

◆ getAs()

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

◆ getAsOffset()

RegionOffset MemRegion::getAsOffset ( ) const

◆ getBaseRegion()

const MemRegion * MemRegion::getBaseRegion ( ) const

◆ getContext()

ASTContext & clang::ento::MemRegion::getContext ( ) const

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

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

Definition at line 660 of file MemRegion.cpp.

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

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

◆ getKind()

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

Definition at line 169 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::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(), StripCasts(), and clang::ento::MemRegionVisitor< SValExplainer, std::string >::Visit().

◆ getMemorySpace()

const MemSpaceRegion * MemRegion::getMemorySpace ( ) const

Definition at line 1127 of file MemRegion.cpp.

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

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

◆ getString()

std::string MemRegion::getString ( ) const

Get a string representation of a region for debug use.

Definition at line 448 of file MemRegion.cpp.

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.

Definition at line 1218 of file MemRegion.cpp.

Referenced by clang::ento::SVal::getAsLocSymbol().

◆ hasGlobalsOrParametersStorage()

bool MemRegion::hasGlobalsOrParametersStorage ( ) const

Definition at line 1151 of file MemRegion.cpp.

◆ hasStackNonParametersStorage()

bool MemRegion::hasStackNonParametersStorage ( ) const

Definition at line 1143 of file MemRegion.cpp.

◆ hasStackParametersStorage()

bool MemRegion::hasStackParametersStorage ( ) const

Definition at line 1147 of file MemRegion.cpp.

◆ hasStackStorage()

bool MemRegion::hasStackStorage ( ) const

Definition at line 1139 of file MemRegion.cpp.

◆ isBoundable()

virtual bool clang::ento::MemRegion::isBoundable ( ) const

◆ isSubRegionOf()

bool MemRegion::isSubRegionOf ( const MemRegion R) const

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

◆ printPretty()

void MemRegion::printPretty ( raw_ostream &  os) const

Print the region for use in diagnostics.

Reimplemented in clang::ento::FieldRegion.

Definition at line 593 of file MemRegion.cpp.

◆ printPrettyAsExpr()

void MemRegion::printPrettyAsExpr ( raw_ostream &  os) const

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, and clang::ento::VarRegion.

Definition at line 600 of file MemRegion.cpp.

Referenced by getDescriptiveName(), clang::ento::FieldRegion::printPrettyAsExpr(), clang::ento::CXXBaseObjectRegion::printPrettyAsExpr(), and clang::ento::CXXDerivedObjectRegion::printPrettyAsExpr().

◆ Profile()

virtual void clang::ento::MemRegion::Profile ( llvm::FoldingSetNodeID &  ID) const
pure virtual

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

source range for declaration retrieved from memory region

Definition at line 699 of file MemRegion.cpp.

References clang::ento::FieldRegion::getDecl(), and clang::FieldDecl::getSourceRange().

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

◆ StripCasts()

const MemRegion * MemRegion::StripCasts ( bool  StripBaseAndDerivedCasts = true) const

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