Lines Matching defs:MemRegion

1 //===- MemRegion.cpp - Abstract memory regions for static analysis --------===//
9 // This file defines MemRegion and its subclasses. MemRegion defines a
15 #include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
62 #define DEBUG_TYPE "MemRegion"
65 // MemRegion Construction.
68 [[maybe_unused]] static bool isAReferenceTypedValueRegion(const MemRegion *R) {
130 MemRegion::~MemRegion() = default;
140 bool SubRegion::isSubRegionOf(const MemRegion* R) const {
141 const MemRegion* r = this;
156 const MemRegion *superRegion = r->getSuperRegion();
248 const MemRegion *superRegion) {
256 const MemRegion *superRegion) {
264 const MemRegion *superRegion) {
281 const MemRegion* superRegion) {
289 const MemRegion *sRegion) {
305 const MemRegion* superRegion) {
317 const MemRegion *superRegion) {
328 unsigned Idx, const MemRegion *SReg) {
340 const MemRegion *sreg) {
341 ID.AddInteger(static_cast<unsigned>(MemRegion::SymbolicRegionKind));
352 const MemRegion* superRegion) {
353 ID.AddInteger(MemRegion::ElementRegionKind);
365 const MemRegion*) {
366 ID.AddInteger(MemRegion::FunctionCodeRegionKind);
377 const MemRegion*) {
378 ID.AddInteger(MemRegion::BlockCodeRegionKind);
390 const MemRegion *sReg) {
391 ID.AddInteger(MemRegion::BlockDataRegionKind);
404 const MemRegion *sReg) {
416 const MemRegion *sReg) {
430 const MemRegion *SReg) {
442 const MemRegion *SReg) {
473 LLVM_DUMP_METHOD void MemRegion::dump() const {
477 std::string MemRegion::getString() const {
484 void MemRegion::dumpToStream(raw_ostream &os) const {
633 bool MemRegion::canPrintPretty() const {
637 bool MemRegion::canPrintPrettyAsExpr() const {
641 StringRef MemRegion::getKindStr() const {
652 void MemRegion::printPretty(raw_ostream &os) const {
659 void MemRegion::printPrettyAsExpr(raw_ostream &) const {
726 std::string MemRegion::getDescriptiveName(bool UseQuotes) const {
729 const MemRegion *R = this;
755 const MemRegion *OR = SI->getAsSymbol()->getOriginRegion();
770 // MemRegion can be pretty printed.
788 SourceRange MemRegion::sourceRange() const {
806 DefinedOrUnknownSVal MemRegionManager::getStaticSize(const MemRegion *MR,
812 case MemRegion::AllocaRegionKind:
813 case MemRegion::SymbolicRegionKind:
815 case MemRegion::StringRegionKind:
819 case MemRegion::CompoundLiteralRegionKind:
820 case MemRegion::CXXBaseObjectRegionKind:
821 case MemRegion::CXXDerivedObjectRegionKind:
822 case MemRegion::CXXTempObjectRegionKind:
823 case MemRegion::CXXLifetimeExtendedObjectRegionKind:
824 case MemRegion::CXXThisRegionKind:
825 case MemRegion::ObjCIvarRegionKind:
826 case MemRegion::NonParamVarRegionKind:
827 case MemRegion::ParamVarRegionKind:
828 case MemRegion::ElementRegionKind:
829 case MemRegion::ObjCStringRegionKind: {
839 case MemRegion::FieldRegionKind: {
897 case MemRegion::BlockDataRegionKind:
898 case MemRegion::BlockCodeRegionKind:
899 case MemRegion::FunctionCodeRegionKind:
949 *MemRegionManager::getGlobalsRegion(MemRegion::Kind K,
952 if (K == MemRegion::GlobalSystemSpaceRegionKind)
954 if (K == MemRegion::GlobalImmutableSpaceRegionKind)
956 assert(K == MemRegion::GlobalInternalSpaceRegionKind);
960 assert(K == MemRegion::StaticGlobalSpaceRegionKind);
1050 const MemRegion *sReg = nullptr;
1056 sReg = getGlobalsRegion(MemRegion::GlobalImmutableSpaceRegionKind);
1058 sReg = getGlobalsRegion(MemRegion::GlobalSystemSpaceRegionKind);
1060 sReg = getGlobalsRegion(MemRegion::GlobalInternalSpaceRegionKind);
1084 ? static_cast<const MemRegion *>(getStackArgumentsRegion(STC))
1085 : static_cast<const MemRegion *>(getStackLocalsRegion(STC));
1091 sReg = getGlobalsRegion(MemRegion::StaticGlobalSpaceRegionKind,
1112 sReg = getGlobalsRegion(MemRegion::StaticGlobalSpaceRegionKind,
1127 const MemRegion *superR) {
1152 sReg = getGlobalsRegion(MemRegion::GlobalImmutableSpaceRegionKind);
1202 MemRegion* data = Regions.FindNodeOrInsertPos(ID, InsertPos);
1271 getGlobalsRegion(MemRegion::GlobalInternalSpaceRegionKind, nullptr));
1351 const MemSpaceRegion *MemRegion::getMemorySpace() const {
1352 const MemRegion *R = this;
1363 bool MemRegion::hasStackStorage() const {
1367 bool MemRegion::hasStackNonParametersStorage() const {
1371 bool MemRegion::hasStackParametersStorage() const {
1377 const MemRegion *MemRegion::getBaseRegion() const {
1378 const MemRegion *R = this;
1381 case MemRegion::ElementRegionKind:
1382 case MemRegion::FieldRegionKind:
1383 case MemRegion::ObjCIvarRegionKind:
1384 case MemRegion::CXXBaseObjectRegionKind:
1385 case MemRegion::CXXDerivedObjectRegionKind:
1397 const MemRegion *MemRegion::getMostDerivedObjectRegion() const {
1398 const MemRegion *R = this;
1404 bool MemRegion::isSubRegionOf(const MemRegion *) const {
1412 const MemRegion *MemRegion::StripCasts(bool StripBaseAndDerivedCasts) const {
1413 const MemRegion *R = this;
1435 const SymbolicRegion *MemRegion::getSymbolicBase() const {
1449 const MemRegion *superR = nullptr;
1474 LLVM_DEBUG(llvm::dbgs() << "MemRegion::getAsArrayOffset: "
1508 static RegionOffset calculateOffset(const MemRegion *R) {
1509 const MemRegion *SymbolicOffsetBase = nullptr;
1514 case MemRegion::CodeSpaceRegionKind:
1515 case MemRegion::StackLocalsSpaceRegionKind:
1516 case MemRegion::StackArgumentsSpaceRegionKind:
1517 case MemRegion::HeapSpaceRegionKind:
1518 case MemRegion::UnknownSpaceRegionKind:
1519 case MemRegion::StaticGlobalSpaceRegionKind:
1520 case MemRegion::GlobalInternalSpaceRegionKind:
1521 case MemRegion::GlobalSystemSpaceRegionKind:
1522 case MemRegion::GlobalImmutableSpaceRegionKind:
1527 case MemRegion::FunctionCodeRegionKind:
1528 case MemRegion::BlockCodeRegionKind:
1529 case MemRegion::BlockDataRegionKind:
1536 case MemRegion::SymbolicRegionKind:
1537 case MemRegion::AllocaRegionKind:
1538 case MemRegion::CompoundLiteralRegionKind:
1539 case MemRegion::CXXThisRegionKind:
1540 case MemRegion::StringRegionKind:
1541 case MemRegion::ObjCStringRegionKind:
1542 case MemRegion::NonParamVarRegionKind:
1543 case MemRegion::ParamVarRegionKind:
1544 case MemRegion::CXXTempObjectRegionKind:
1545 case MemRegion::CXXLifetimeExtendedObjectRegionKind:
1549 case MemRegion::ObjCIvarRegionKind:
1557 case MemRegion::CXXBaseObjectRegionKind: {
1609 case MemRegion::CXXDerivedObjectRegionKind: {
1614 case MemRegion::ElementRegionKind: {
1642 case MemRegion::FieldRegionKind: {
1683 RegionOffset MemRegion::getAsOffset() const {
1734 using VarVec = BumpVector<const MemRegion *>;
1757 auto *Vec = static_cast<BumpVector<const MemRegion *> *>(ReferencedVars);
1763 static_cast<BumpVector<const MemRegion *> *>(OriginalVars);
1773 auto *Vec = static_cast<BumpVector<const MemRegion *> *>(ReferencedVars);
1779 static_cast<BumpVector<const MemRegion *> *>(OriginalVars);
1807 void RegionAndSymbolInvalidationTraits::setTrait(const MemRegion *MR,
1825 bool RegionAndSymbolInvalidationTraits::hasTrait(const MemRegion *MR,