clang 8.0.0

Public Member Functions | List of all members
clang::ento::MemRegionManager Class Reference

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

## Public Member Functions
| MemRegionManager (ASTContext &c, llvm::BumpPtrAllocator &a)
| ~MemRegionManager ()
ASTContext & | getContext ()
llvm::BumpPtrAllocator & | getAllocator ()
const StackLocalsSpaceRegion * | getStackLocalsRegion (const StackFrameContext *STC)
| getStackLocalsRegion - Retrieve the memory region associated with the specified stack frame. More...
const StackArgumentsSpaceRegion * | getStackArgumentsRegion (const StackFrameContext *STC)
| getStackArgumentsRegion - Retrieve the memory region associated with function/method arguments of the specified stack frame. More...
const GlobalsSpaceRegion * | getGlobalsRegion (MemRegion::Kind K=MemRegion::GlobalInternalSpaceRegionKind, const CodeTextRegion *R=nullptr)
| getGlobalsRegion - Retrieve the memory region associated with global variables. More...
const HeapSpaceRegion * | getHeapRegion ()
| getHeapRegion - Retrieve the memory region associated with the generic "heap". More...
const UnknownSpaceRegion * | getUnknownRegion ()
| getUnknownRegion - Retrieve the memory region associated with unknown memory space. More...
const CodeSpaceRegion * | getCodeRegion ()
const AllocaRegion * | getAllocaRegion (const Expr *Ex, unsigned Cnt, const LocationContext *LC)
| getAllocaRegion - Retrieve a region associated with a call to alloca(). More...
const CompoundLiteralRegion * | getCompoundLiteralRegion (const CompoundLiteralExpr *CL, const LocationContext *LC)
| getCompoundLiteralRegion - Retrieve the region associated with a given CompoundLiteral. More...
const CXXThisRegion * | getCXXThisRegion (QualType thisPointerTy, const LocationContext *LC)
| getCXXThisRegion - Retrieve the [artificial] region associated with the parameter 'this'. More...
const SymbolicRegion * | getSymbolicRegion (SymbolRef Sym)
| Retrieve or create a "symbolic" memory region. More...
const SymbolicRegion * | getSymbolicHeapRegion (SymbolRef sym)
| Return a unique symbolic region belonging to heap memory space. More...
const StringRegion * | getStringRegion (const StringLiteral *Str)
const ObjCStringRegion * | getObjCStringRegion (const ObjCStringLiteral *Str)
const VarRegion * | getVarRegion (const VarDecl *D, const LocationContext *LC)
| getVarRegion - Retrieve or create the memory region associated with a specified VarDecl and LocationContext. More...
const VarRegion * | getVarRegion (const VarDecl *D, const MemRegion *superR)
| getVarRegion - Retrieve or create the memory region associated with a specified VarDecl and super region. More...
const ElementRegion * | getElementRegion (QualType elementType, NonLoc Idx, const SubRegion *superRegion, ASTContext &Ctx)
| getElementRegion - Retrieve the memory region associated with the associated element type, index, and super region. More...
const ElementRegion * | getElementRegionWithSuper (const ElementRegion *ER, const SubRegion *superRegion)
const FieldRegion * | getFieldRegion (const FieldDecl *fd, const SubRegion *superRegion)
| getFieldRegion - Retrieve or create the memory region associated with a specified FieldDecl. More...
const FieldRegion * | getFieldRegionWithSuper (const FieldRegion *FR, const SubRegion *superRegion)
const ObjCIvarRegion * | getObjCIvarRegion (const ObjCIvarDecl *ivd, const SubRegion *superRegion)
| getObjCIvarRegion - Retrieve or create the memory region associated with a specified Objective-c instance variable. More...
const CXXTempObjectRegion * | getCXXTempObjectRegion (Expr const *Ex, LocationContext const *LC)
const CXXBaseObjectRegion * | getCXXBaseObjectRegion (const CXXRecordDecl *BaseClass, const SubRegion *Super, bool IsVirtual)
| Create a CXXBaseObjectRegion with the given base class for region `Super`. More...
const CXXBaseObjectRegion * | getCXXBaseObjectRegionWithSuper (const CXXBaseObjectRegion *baseReg, const SubRegion *superRegion)
| Create a CXXBaseObjectRegion with the same CXXRecordDecl but a different super region. More...
const CXXDerivedObjectRegion * | getCXXDerivedObjectRegion (const CXXRecordDecl *BaseClass, const SubRegion *Super)
| Create a CXXDerivedObjectRegion with the given derived class for region `Super`. More...
const FunctionCodeRegion * | getFunctionCodeRegion (const NamedDecl *FD)
const BlockCodeRegion * | getBlockCodeRegion (const BlockDecl *BD, CanQualType locTy, AnalysisDeclContext *AC)
const BlockDataRegion * | getBlockDataRegion (const BlockCodeRegion *bc, const LocationContext *lc, unsigned blockCount)
| getBlockDataRegion - Get the memory region associated with an instance of a block. More...
const CXXTempObjectRegion * | getCXXStaticTempObjectRegion (const Expr *Ex)
| Create a CXXTempObjectRegion for temporaries which are lifetime-extended by static references. More...
template<typename RegionTy , typename SuperTy , typename Arg1Ty >
RegionTy * | getSubRegion (const Arg1Ty arg1, const SuperTy *superRegion)
template<typename RegionTy , typename SuperTy , typename Arg1Ty , typename Arg2Ty >
RegionTy * | getSubRegion (const Arg1Ty arg1, const Arg2Ty arg2, const SuperTy *superRegion)
template<typename RegionTy , typename SuperTy , typename Arg1Ty , typename Arg2Ty , typename Arg3Ty >
RegionTy * | getSubRegion (const Arg1Ty arg1, const Arg2Ty arg2, const Arg3Ty arg3, const SuperTy *superRegion)
template<typename REG >
const REG * | LazyAllocate (REG *&region)
template<typename REG , typename ARG >
const REG * | LazyAllocate (REG *&region, ARG a)

## Detailed Description

Definition at line 1242 of file MemRegion.h.

## Constructor & Destructor Documentation

## ◆ MemRegionManager()

clang::ento::MemRegionManager::MemRegionManager | ( | ASTContext & | c,
|  | llvm::BumpPtrAllocator & | a
| ) |  |
| inline

Definition at line 1263 of file MemRegion.h.

## ◆ ~MemRegionManager()

MemRegionManager::~MemRegionManager | ( |  | ) |
| default

Referenced by getSubRegion().

## Member Function Documentation

## ◆ getAllocaRegion()

const AllocaRegion * MemRegionManager::getAllocaRegion | ( | const Expr * | Ex,
|  | unsigned | Cnt,
|  | const LocationContext * | LC
| ) |  |

getAllocaRegion - Retrieve a region associated with a call to alloca().

Definition at line 1119 of file MemRegion.cpp.

References clang::LocationContext::getStackFrame(), and getStackLocalsRegion().

## ◆ getAllocator()

llvm::BumpPtrAllocator& clang::ento::MemRegionManager::getAllocator | ( |  | ) |
| inline

Definition at line 1268 of file MemRegion.h.

Referenced by clang::ento::MemRegion::getAsOffset().

## ◆ getBlockCodeRegion()

const BlockCodeRegion * MemRegionManager::getBlockCodeRegion | ( | const BlockDecl * | BD,
|  | CanQualType | locTy,
|  | AnalysisDeclContext * | AC
| ) |  |

Definition at line 1015 of file MemRegion.cpp.

References getCodeRegion().

Referenced by clang::ento::SValBuilder::getBlockPointer(), and getVarRegion().

## ◆ getBlockDataRegion()

const BlockDataRegion * MemRegionManager::getBlockDataRegion | ( | const BlockCodeRegion * | bc,
|  | const LocationContext * | lc,
|  | unsigned | blockCount
| ) |  |

getBlockDataRegion - Get the memory region associated with an instance of a block.

Unlike many other MemRegions, the LocationContext* argument is allowed to be NULL for cases where we have no known context.

Definition at line 938 of file MemRegion.cpp.

References clang::ento::BlockCodeRegion::getDecl(), getGlobalsRegion(), clang::LocationContext::getStackFrame(), getStackLocalsRegion(), getUnknownRegion(), and clang::BlockDecl::hasCaptures().

Referenced by clang::ento::SValBuilder::getBlockPointer().

## ◆ getCodeRegion()

const CodeSpaceRegion * MemRegionManager::getCodeRegion | ( |  | ) |

Definition at line 797 of file MemRegion.cpp.

Referenced by clang::ento::MemRegion::getAsOffset(), getBlockCodeRegion(), getFunctionCodeRegion(), and clang::ento::StaticGlobalSpaceRegion::Profile().

## ◆ getCompoundLiteralRegion()

const CompoundLiteralRegion * MemRegionManager::getCompoundLiteralRegion | ( | const CompoundLiteralExpr * | CL,
|  | const LocationContext * | LC
| ) |  |

getCompoundLiteralRegion - Retrieve the region associated with a given CompoundLiteral.

Definition at line 972 of file MemRegion.cpp.

References getGlobalsRegion(), clang::LocationContext::getStackFrame(), getStackLocalsRegion(), and clang::CompoundLiteralExpr::isFileScope().

Referenced by clang::ento::StoreManager::getLValueCompoundLiteral().

## ◆ getContext()

ASTContext& clang::ento::MemRegionManager::getContext | ( |  | ) |
| inline

Definition at line 1266 of file MemRegion.h.

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(), and getVarRegion().

## ◆ getCXXBaseObjectRegion()

const CXXBaseObjectRegion * MemRegionManager::getCXXBaseObjectRegion | ( | const CXXRecordDecl * | BaseClass,
|  | const SubRegion * | Super,
|  | bool | IsVirtual
| ) |  |

Create a CXXBaseObjectRegion with the given base class for region `Super`.

The type of `Super` is assumed be a class deriving from `BaseClass`.

Definition at line 1072 of file MemRegion.cpp.

References isValidBaseClass().

Referenced by clang::ento::StoreManager::evalDerivedToBase().

## ◆ getCXXBaseObjectRegionWithSuper()

const CXXBaseObjectRegion* clang::ento::MemRegionManager::getCXXBaseObjectRegionWithSuper | ( | const CXXBaseObjectRegion * | baseReg,
|  | const SubRegion * | superRegion
| ) |  |
| inline

Create a CXXBaseObjectRegion with the same CXXRecordDecl but a different super region.

Definition at line 1374 of file MemRegion.h.

References clang::ento::CXXBaseObjectRegion::getDecl(), and clang::ento::CXXBaseObjectRegion::isVirtual().

## ◆ getCXXDerivedObjectRegion()

const CXXDerivedObjectRegion * MemRegionManager::getCXXDerivedObjectRegion | ( | const CXXRecordDecl * | BaseClass,
|  | const SubRegion * | Super
| ) |  |

Create a CXXDerivedObjectRegion with the given derived class for region `Super`.

This should not be used for casting an existing CXXBaseObjectRegion back to the derived type; instead, CXXBaseObjectRegion should be removed.

Definition at line 1092 of file MemRegion.cpp.

## ◆ getCXXStaticTempObjectRegion()

const CXXTempObjectRegion * MemRegionManager::getCXXStaticTempObjectRegion | ( | const Expr * | Ex | ) |

Create a CXXTempObjectRegion for temporaries which are lifetime-extended by static references.

This differs from getCXXTempObjectRegion in the super-region used.

Definition at line 966 of file MemRegion.cpp.

References getGlobalsRegion().

Referenced by clang::ento::ExprEngine::CreateCXXTemporaryObject(), and clang::ento::ExprEngine::getInitialState().

## ◆ getCXXTempObjectRegion()

const CXXTempObjectRegion * MemRegionManager::getCXXTempObjectRegion | ( | Expr const * | Ex,
|  | LocationContext const * | LC
| ) |  |

Definition at line 1042 of file MemRegion.cpp.

References clang::LocationContext::getStackFrame(), and getStackLocalsRegion().

Referenced by clang::ento::ExprEngine::CreateCXXTemporaryObject(), clang::ento::ExprEngine::getInitialState(), clang::ento::ExprEngine::VisitCXXConstructExpr(), and clang::ento::ExprEngine::VisitLambdaExpr().

## ◆ getCXXThisRegion()

const CXXThisRegion * MemRegionManager::getCXXThisRegion | ( | QualType | thisPointerTy,
|  | const LocationContext * | LC
| ) |  |

getCXXThisRegion - Retrieve the [artificial] region associated with the parameter 'this'.

Definition at line 1098 of file MemRegion.cpp.

References clang::Type::getAs(), clang::LocationContext::getDecl(), clang::LocationContext::getParent(), getStackArgumentsRegion(), clang::LocationContext::getStackFrame(), and clang::LocationContext::inTopFrame().

Referenced by clang::ento::ExprEngine::VisitCXXThisExpr().

## ◆ getElementRegion()

const ElementRegion * MemRegionManager::getElementRegion | ( | QualType | elementType,
|  | NonLoc | Idx,
|  | const SubRegion * | superRegion,
|  | ASTContext & | Ctx
| ) |  |

getElementRegion - Retrieve the memory region associated with the associated element type, index, and super region.

Definition at line 988 of file MemRegion.cpp.

References clang::ASTContext::getCanonicalType(), and clang::CanQual< T >::getUnqualifiedType().

Referenced by clang::ento::mpi::MPIChecker::checkMissingWaits(), clang::ento::StoreManager::GetElementZeroRegion(), clang::ento::StoreManager::getLValueElement(), and clang::ento::StoreManager::MakeElementRegion().

## ◆ getElementRegionWithSuper()

const ElementRegion* clang::ento::MemRegionManager::getElementRegionWithSuper | ( | const ElementRegion * | ER,
|  | const SubRegion * | superRegion
| ) |  |
| inline

Definition at line 1335 of file MemRegion.h.

References clang::ento::MemRegion::getContext(), clang::ento::ElementRegion::getElementType(), and clang::ento::ElementRegion::getIndex().

## ◆ getFieldRegion()

const FieldRegion * MemRegionManager::getFieldRegion | ( | const FieldDecl * | fd,
|  | const SubRegion * | superRegion
| ) |  |

getFieldRegion - Retrieve or create the memory region associated with a specified FieldDecl.

'superRegion' corresponds to the containing memory region (which typically represents the memory representing a structure or class).

Definition at line 1030 of file MemRegion.cpp.

Referenced by clang::ento::StoreManager::CastRetrievedVal().

## ◆ getFieldRegionWithSuper()

const FieldRegion* clang::ento::MemRegionManager::getFieldRegionWithSuper | ( | const FieldRegion * | FR,
|  | const SubRegion * | superRegion
| ) |  |
| inline

Definition at line 1348 of file MemRegion.h.

References clang::ento::FieldRegion::getDecl().

## ◆ getFunctionCodeRegion()

const FunctionCodeRegion * MemRegionManager::getFunctionCodeRegion | ( | const NamedDecl * | FD | ) |

Definition at line 1010 of file MemRegion.cpp.

References getCodeRegion().

Referenced by clang::ento::SValBuilder::getFunctionPointer(), and getVarRegion().

## ◆ getGlobalsRegion()

const GlobalsSpaceRegion * MemRegionManager::getGlobalsRegion | ( | MemRegion::Kind | K = `MemRegion::GlobalInternalSpaceRegionKind`,
|  | const CodeTextRegion * | R = `nullptr`
| ) |  |

getGlobalsRegion - Retrieve the memory region associated with global variables.

Definition at line 768 of file MemRegion.cpp.

Referenced by getBlockDataRegion(), getCompoundLiteralRegion(), getCXXStaticTempObjectRegion(), getObjCStringRegion(), getStringRegion(), getVarRegion(), and clang::ento::getWidenedLoopState().

## ◆ getHeapRegion()

const HeapSpaceRegion * MemRegionManager::getHeapRegion | ( |  | ) |

getHeapRegion - Retrieve the memory region associated with the generic "heap".

Definition at line 789 of file MemRegion.cpp.

Referenced by getSymbolicHeapRegion().

## ◆ getObjCIvarRegion()

const ObjCIvarRegion * MemRegionManager::getObjCIvarRegion | ( | const ObjCIvarDecl * | ivd,
|  | const SubRegion * | superRegion
| ) |  |

getObjCIvarRegion - Retrieve or create the memory region associated with a specified Objective-c instance variable.

'superRegion' corresponds to the containing region (which typically represents the Objective-C object).

Definition at line 1036 of file MemRegion.cpp.

Referenced by clang::ento::StoreManager::CastRetrievedVal().

## ◆ getObjCStringRegion()

const ObjCStringRegion * MemRegionManager::getObjCStringRegion | ( | const ObjCStringLiteral * | Str | ) |

Definition at line 811 of file MemRegion.cpp.

References getGlobalsRegion().

## ◆ getStackArgumentsRegion()

const StackArgumentsSpaceRegion * MemRegionManager::getStackArgumentsRegion | ( | const StackFrameContext * | STC | ) |

getStackArgumentsRegion - Retrieve the memory region associated with function/method arguments of the specified stack frame.

Definition at line 755 of file MemRegion.cpp.

Referenced by getCXXThisRegion(), getVarRegion(), and clang::ento::getWidenedLoopState().

## ◆ getStackLocalsRegion()

const StackLocalsSpaceRegion * MemRegionManager::getStackLocalsRegion | ( | const StackFrameContext * | STC | ) |

getStackLocalsRegion - Retrieve the memory region associated with the specified stack frame.

Definition at line 742 of file MemRegion.cpp.

Referenced by getAllocaRegion(), getBlockDataRegion(), getCompoundLiteralRegion(), getCXXTempObjectRegion(), getVarRegion(), and clang::ento::getWidenedLoopState().

## ◆ getStringRegion()

const StringRegion * MemRegionManager::getStringRegion | ( | const StringLiteral * | Str | ) |

Definition at line 805 of file MemRegion.cpp.

References getGlobalsRegion().

## ◆ getSubRegion() [1/3]

template<typename RegionTy , typename SuperTy , typename Arg1Ty >

RegionTy* clang::ento::MemRegionManager::getSubRegion | ( | const Arg1Ty | arg1,
|  | const SuperTy * | superRegion
| ) |  |

Definition at line 67 of file MemRegion.cpp.

## ◆ getSubRegion() [2/3]

template<typename RegionTy , typename SuperTy , typename Arg1Ty , typename Arg2Ty >

RegionTy* clang::ento::MemRegionManager::getSubRegion | ( | const Arg1Ty | arg1,
|  | const Arg2Ty | arg2,
|  | const SuperTy * | superRegion
| ) |  |

Definition at line 84 of file MemRegion.cpp.

## ◆ getSubRegion() [3/3]

template<typename RegionTy , typename SuperTy , typename Arg1Ty , typename Arg2Ty , typename Arg3Ty >

RegionTy* clang::ento::MemRegionManager::getSubRegion | ( | const Arg1Ty | arg1,
|  | const Arg2Ty | arg2,
|  | const Arg3Ty | arg3,
|  | const SuperTy * | superRegion
| ) |  |

Definition at line 102 of file MemRegion.cpp.

References clang::ento::MemRegion::~MemRegion(), and ~MemRegionManager().

## ◆ getSymbolicHeapRegion()

const SymbolicRegion * MemRegionManager::getSymbolicHeapRegion | ( | SymbolRef | sym | ) |

Return a unique symbolic region belonging to heap memory space.

Definition at line 1025 of file MemRegion.cpp.

References getHeapRegion().

Referenced by clang::ento::SValBuilder::getConjuredHeapSymbolVal().

## ◆ getSymbolicRegion()

const SymbolicRegion * MemRegionManager::getSymbolicRegion | ( | SymbolRef | Sym | ) |

Retrieve or create a "symbolic" memory region.

getSymbolicRegion - Retrieve or create a "symbolic" memory region.

Definition at line 1021 of file MemRegion.cpp.

References getUnknownRegion().

Referenced by clang::ento::SValBuilder::conjureSymbolVal(), clang::ento::SValBuilder::getDerivedRegionValueSymbolVal(), clang::ento::SValBuilder::getMetadataSymbolVal(), clang::ento::SValBuilder::getRegionValueSymbolVal(), and clang::ento::SValBuilder::makeLoc().

## ◆ getUnknownRegion()

const UnknownSpaceRegion * MemRegionManager::getUnknownRegion | ( |  | ) |

getUnknownRegion - Retrieve the memory region associated with unknown memory space.

Definition at line 793 of file MemRegion.cpp.

Referenced by clang::ento::MemRegion::getAsOffset(), getBlockDataRegion(), getSymbolicRegion(), and getVarRegion().

## ◆ getVarRegion() [1/2]

const VarRegion * MemRegionManager::getVarRegion | ( | const VarDecl * | D,
|  | const LocationContext * | LC
| ) |  |

getVarRegion - Retrieve or create the memory region associated with a specified VarDecl and LocationContext.

Definition at line 846 of file MemRegion.cpp.

References clang::Type::getAs(), getBlockCodeRegion(), clang::ASTContext::getBlockPointerType(), clang::ASTContext::getCanonicalType(), getContext(), clang::ento::VarRegion::getDecl(), clang::Decl::getDeclContext(), getFunctionCodeRegion(), clang::ASTContext::getFunctionNoProtoType(), getGlobalsRegion(), clang::Decl::getLocation(), clang::NamedDecl::getName(), clang::BlockDecl::getSignatureAsWritten(), clang::ASTContext::getSourceManager(), getStackArgumentsRegion(), getStackLocalsRegion(), getStackOrCaptureRegionForDeclContext(), clang::ValueDecl::getType(), clang::QualType::getTypePtrOrNull(), getUnknownRegion(), clang::VarDecl::hasGlobalStorage(), clang::VarDecl::hasLocalStorage(), clang::Type::isArithmeticType(), clang::QualType::isConstQualified(), clang::SourceManager::isInSystemHeader(), clang::QualType::isNull(), clang::VarDecl::isStaticLocal(), and clang::ASTContext::VoidTy.

Referenced by clang::ento::retaincountchecker::RetainCountChecker::checkPostStmt(), clang::ento::MemRegion::getAsOffset(), and clang::ento::StoreManager::getLValueVar().

## ◆ getVarRegion() [2/2]

const VarRegion * MemRegionManager::getVarRegion | ( | const VarDecl * | D,
|  | const MemRegion * | superR
| ) |  |

getVarRegion - Retrieve or create the memory region associated with a specified VarDecl and super region.

Definition at line 932 of file MemRegion.cpp.

## ◆ LazyAllocate() [1/2]

template<typename REG >

const REG* clang::ento::MemRegionManager::LazyAllocate | ( | REG *& | region | ) |

Definition at line 722 of file MemRegion.cpp.

## ◆ LazyAllocate() [2/2]

template<typename REG , typename ARG >

const REG* clang::ento::MemRegionManager::LazyAllocate | ( | REG *& | region,
|  | ARG | a
| ) |  |

Definition at line 732 of file MemRegion.cpp.

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

- include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
- lib/StaticAnalyzer/Core/MemRegion.cpp