15 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_MEMREGION_H 16 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_MEMREGION_H 31 #include "llvm/ADT/DenseMap.h" 32 #include "llvm/ADT/FoldingSet.h" 33 #include "llvm/ADT/Optional.h" 34 #include "llvm/ADT/PointerIntPair.h" 35 #include "llvm/Support/Allocator.h" 36 #include "llvm/Support/Casting.h" 45 class AnalysisDeclContext;
48 class LocationContext;
49 class StackFrameContext;
55 class MemRegionManager;
97 #define REGION(Id, Parent) Id ## Kind, 98 #define REGION_RANGE(Id, First, Last) BEGIN_##Id = First, END_##Id = Last, 99 #include "clang/StaticAnalyzer/Core/PathSensitive/Regions.def" 104 mutable Optional<RegionOffset> cachedOffset;
113 virtual void Profile(llvm::FoldingSetNodeID&
ID)
const = 0;
123 const MemRegion *getMostDerivedObjectRegion()
const;
127 virtual bool isSubRegionOf(
const MemRegion *R)
const;
129 const MemRegion *StripCasts(
bool StripBaseAndDerivedCasts =
true)
const;
135 bool hasGlobalsOrParametersStorage()
const;
137 bool hasStackStorage()
const;
139 bool hasStackNonParametersStorage()
const;
141 bool hasStackParametersStorage()
const;
147 std::string getString()
const;
149 virtual void dumpToStream(raw_ostream &os)
const;
154 virtual bool canPrintPretty()
const;
157 virtual void printPretty(raw_ostream &os)
const;
161 virtual bool canPrintPrettyAsExpr()
const;
167 virtual void printPrettyAsExpr(raw_ostream &os)
const;
171 template<
typename RegionTy>
const RegionTy* getAs()
const;
183 std::string getDescriptiveName(
bool UseQuotes =
true)
const;
212 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
216 return k >= BEGIN_MEMSPACES && k <= END_MEMSPACES;
229 void dumpToStream(raw_ostream &os)
const override;
232 return R->
getKind() == CodeSpaceRegionKind;
237 virtual void anchor();
247 return k >= BEGIN_GLOBAL_MEMSPACES && k <= END_GLOBAL_MEMSPACES;
267 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
269 void dumpToStream(raw_ostream &os)
const override;
274 return R->
getKind() == StaticGlobalSpaceRegionKind;
285 void anchor()
override;
296 return k >= BEGIN_NON_STATIC_GLOBAL_MEMSPACES &&
297 k <= END_NON_STATIC_GLOBAL_MEMSPACES;
310 void dumpToStream(raw_ostream &os)
const override;
313 return R->
getKind() == GlobalSystemSpaceRegionKind;
329 void dumpToStream(raw_ostream &os)
const override;
332 return R->
getKind() == GlobalImmutableSpaceRegionKind;
346 void dumpToStream(raw_ostream &os)
const override;
349 return R->
getKind() == GlobalInternalSpaceRegionKind;
360 void dumpToStream(raw_ostream &os)
const override;
363 return R->
getKind() == HeapSpaceRegionKind;
374 void dumpToStream(raw_ostream &os)
const override;
377 return R->
getKind() == UnknownSpaceRegionKind;
382 virtual void anchor();
396 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
400 return k >= BEGIN_STACK_MEMSPACES && k <= END_STACK_MEMSPACES;
411 void dumpToStream(raw_ostream &os)
const override;
414 return R->
getKind() == StackLocalsSpaceRegionKind;
426 void dumpToStream(raw_ostream &os)
const override;
429 return R->
getKind() == StackArgumentsSpaceRegionKind;
436 virtual void anchor();
458 bool isSubRegionOf(
const MemRegion* R)
const override;
461 return R->
getKind() > END_MEMSPACES;
481 :
SubRegion(superRegion, AllocaRegionKind), Cnt(cnt), Ex(ex) {
485 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const Expr *Ex,
486 unsigned Cnt,
const MemRegion *superRegion);
495 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
497 void dumpToStream(raw_ostream &os)
const override;
500 return R->
getKind() == AllocaRegionKind;
506 void anchor()
override;
514 virtual QualType getLocationType()
const = 0;
524 return k >= BEGIN_TYPED_REGIONS && k <= END_TYPED_REGIONS;
530 void anchor()
override;
538 virtual QualType getValueType()
const = 0;
558 return k >= BEGIN_TYPED_VALUE_REGIONS && k <= END_TYPED_VALUE_REGIONS;
563 void anchor()
override;
575 return k >= BEGIN_CODE_TEXT_REGIONS && k <= END_CODE_TEXT_REGIONS;
587 assert(isa<ObjCMethodDecl>(fd) || isa<FunctionDecl>(fd));
590 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const NamedDecl *FD,
596 if (
const auto *D = dyn_cast<FunctionDecl>(FD)) {
600 assert(isa<ObjCMethodDecl>(FD));
601 assert(
false &&
"Getting the type of ObjCMethod is not supported yet");
612 void dumpToStream(raw_ostream &os)
const override;
614 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
617 return R->
getKind() == FunctionCodeRegionKind;
636 :
CodeTextRegion(sreg, BlockCodeRegionKind), BD(bd), AC(ac), locTy(lTy) {
642 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const BlockDecl *BD,
657 void dumpToStream(raw_ostream &os)
const override;
659 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
662 return R->
getKind() == BlockCodeRegionKind;
678 void *ReferencedVars =
nullptr;
679 void *OriginalVars =
nullptr;
683 :
TypedRegion(sreg, BlockDataRegionKind), BC(bc), LC(lc),
687 assert(isa<GlobalImmutableSpaceRegion>(sreg) ||
688 isa<StackLocalsSpaceRegion>(sreg) ||
689 isa<UnknownSpaceRegion>(sreg));
692 static void ProfileRegion(llvm::FoldingSetNodeID&,
const BlockCodeRegion *,
710 : R(r), OriginalR(originalR) {}
713 return cast<VarRegion>(*R);
717 return cast<VarRegion>(*OriginalR);
721 assert((R ==
nullptr) == (I.R ==
nullptr));
726 assert((R ==
nullptr) == (I.R ==
nullptr));
744 void dumpToStream(raw_ostream &os)
const override;
746 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
749 return R->
getKind() == BlockDataRegionKind;
753 void LazyInitializeReferencedVars();
754 std::pair<const VarRegion *, const VarRegion *>
755 getCaptureRegions(
const VarDecl *VD);
769 :
SubRegion(sreg, SymbolicRegionKind), sym(s) {
772 assert(s && isa<SymbolData>(s));
776 assert(isa<UnknownSpaceRegion>(sreg) || isa<HeapSpaceRegion>(sreg));
786 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
788 static void ProfileRegion(llvm::FoldingSetNodeID& ID,
792 void dumpToStream(raw_ostream &os)
const override;
795 return R->
getKind() == SymbolicRegionKind;
810 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
823 void Profile(llvm::FoldingSetNodeID&
ID)
const override {
824 ProfileRegion(ID, Str, superRegion);
827 void dumpToStream(raw_ostream &os)
const override;
830 return R->
getKind() == StringRegionKind;
846 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
857 void Profile(llvm::FoldingSetNodeID&
ID)
const override {
858 ProfileRegion(ID, Str, superRegion);
861 void dumpToStream(raw_ostream &os)
const override;
864 return R->
getKind() == ObjCStringRegionKind;
880 assert(isa<GlobalInternalSpaceRegion>(sReg) ||
881 isa<StackLocalsSpaceRegion>(sReg));
884 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
893 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
895 void dumpToStream(raw_ostream &os)
const override;
900 return R->
getKind() == CompoundLiteralRegionKind;
914 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const Decl *D,
919 void Profile(llvm::FoldingSetNodeID& ID)
const override;
923 return k >= BEGIN_DECL_REGIONS && k <= END_DECL_REGIONS;
937 assert(isa<GlobalsSpaceRegion>(sReg) || isa<StackSpaceRegion>(sReg) ||
938 isa<BlockDataRegion>(sReg) || isa<UnknownSpaceRegion>(sReg));
941 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const VarDecl *VD,
947 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
955 return getDecl()->getType();
958 void dumpToStream(raw_ostream &os)
const override;
960 bool canPrintPrettyAsExpr()
const override;
962 void printPrettyAsExpr(raw_ostream &os)
const override;
965 return R->
getKind() == VarRegionKind;
978 ThisPointerTy(thisPointerTy) {
979 assert(ThisPointerTy->getPointeeType()->getAsCXXRecordDecl() &&
980 "Invalid region type!");
983 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
988 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
994 void dumpToStream(raw_ostream &os)
const override;
997 return R->
getKind() == CXXThisRegionKind;
1010 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const FieldDecl *FD,
1020 return getDecl()->getType();
1025 void dumpToStream(raw_ostream &os)
const override;
1027 bool canPrintPretty()
const override;
1028 void printPretty(raw_ostream &os)
const override;
1029 bool canPrintPrettyAsExpr()
const override;
1030 void printPrettyAsExpr(raw_ostream &os)
const override;
1033 return R->
getKind() == FieldRegionKind;
1042 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const ObjCIvarDecl *ivd,
1047 QualType getValueType()
const override;
1049 bool canPrintPrettyAsExpr()
const override;
1050 void printPrettyAsExpr(raw_ostream &os)
const override;
1052 void dumpToStream(raw_ostream &os)
const override;
1055 return R->
getKind() == ObjCIvarRegionKind;
1070 : Region(reg), Offset(offset) {}
1077 void dumpToStream(raw_ostream &os)
const;
1093 "The index must be signed");
1095 "Invalid region type!");
1098 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
QualType elementType,
1111 void dumpToStream(raw_ostream &os)
const override;
1113 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
1116 return R->
getKind() == ElementRegionKind;
1129 assert(isa<StackLocalsSpaceRegion>(sReg) ||
1130 isa<GlobalInternalSpaceRegion>(sReg));
1133 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
1141 void dumpToStream(raw_ostream &os)
const override;
1143 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1146 return R->
getKind() == CXXTempObjectRegionKind;
1155 llvm::PointerIntPair<const CXXRecordDecl *, 1, bool> Data;
1163 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
const CXXRecordDecl *RD,
1170 QualType getValueType()
const override;
1172 void dumpToStream(raw_ostream &os)
const override;
1174 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1176 bool canPrintPrettyAsExpr()
const override;
1178 void printPrettyAsExpr(raw_ostream &os)
const override;
1181 return region->
getKind() == CXXBaseObjectRegionKind;
1202 "Should have unwrapped a base region instead!");
1205 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
const CXXRecordDecl *RD,
1211 QualType getValueType()
const override;
1213 void dumpToStream(raw_ostream &os)
const override;
1215 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1217 bool canPrintPrettyAsExpr()
const override;
1219 void printPrettyAsExpr(raw_ostream &os)
const override;
1222 return region->
getKind() == CXXDerivedObjectRegionKind;
1226 template<
typename RegionTy>
1228 if (
const auto *RT = dyn_cast<RegionTy>(
this))
1240 llvm::BumpPtrAllocator& A;
1241 llvm::FoldingSet<MemRegion> Regions;
1247 llvm::DenseMap<const StackFrameContext *, StackLocalsSpaceRegion *>
1248 StackLocalsSpaceRegions;
1249 llvm::DenseMap<const StackFrameContext *, StackArgumentsSpaceRegion *>
1250 StackArgumentsSpaceRegions;
1251 llvm::DenseMap<const CodeTextRegion *, StaticGlobalSpaceRegion *>
1252 StaticsGlobalSpaceRegions;
1346 return getFieldRegion(FR->
getDecl(), superRegion);
1372 return getCXXBaseObjectRegion(baseReg->
getDecl(), superRegion,
1395 unsigned blockCount);
1403 template <
typename RegionTy,
typename SuperTy,
1405 RegionTy* getSubRegion(
const Arg1Ty arg1,
1406 const SuperTy* superRegion);
1408 template <
typename RegionTy,
typename SuperTy,
1409 typename Arg1Ty,
typename Arg2Ty>
1410 RegionTy* getSubRegion(
const Arg1Ty arg1,
const Arg2Ty arg2,
1411 const SuperTy* superRegion);
1413 template <
typename RegionTy,
typename SuperTy,
1414 typename Arg1Ty,
typename Arg2Ty,
typename Arg3Ty>
1415 RegionTy* getSubRegion(
const Arg1Ty arg1,
const Arg2Ty arg2,
1417 const SuperTy* superRegion);
1419 template <
typename REG>
1420 const REG* LazyAllocate(REG*& region);
1422 template <
typename REG,
typename ARG>
1423 const REG* LazyAllocate(REG*& region, ARG
a);
1431 return getMemRegionManager()->getContext();
1440 using StorageTypeForKinds =
unsigned char;
1442 llvm::DenseMap<const MemRegion *, StorageTypeForKinds> MRTraitsMap;
1443 llvm::DenseMap<SymbolRef, StorageTypeForKinds> SymTraitsMap;
1445 using const_region_iterator =
1446 llvm::DenseMap<const MemRegion *, StorageTypeForKinds>::const_iterator;
1447 using const_symbol_iterator =
1448 llvm::DenseMap<SymbolRef, StorageTypeForKinds>::const_iterator;
1454 TK_PreserveContents = 0x1,
1457 TK_SuppressEscape = 0x2,
1460 TK_DoNotInvalidateSuperRegion = 0x4,
1464 TK_EntireMemSpace = 0x8
1488 #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_MEMREGION_H RegionOffset(const MemRegion *r, int64_t off)
const ElementRegion * getElementRegionWithSuper(const ElementRegion *ER, const SubRegion *superRegion)
bool isBoundable() const override
Defines the clang::ASTContext interface.
CodeTextRegion(const MemSpaceRegion *sreg, Kind k)
TypedValueRegion - An abstract class representing regions having a typed value.
static bool classof(const MemRegion *R)
CompoundLiteralRegion - A memory region representing a compound literal.
QualType getValueType() const override
PointerType - C99 6.7.5.1 - Pointer Declarators.
A (possibly-)qualified type.
MemRegion - The root abstract class for all memory regions.
bool isBlockPointerType() const
const CXXRecordDecl * getDecl() const
QualType getDesugaredType(const ASTContext &Context) const
Return the specified type with any "sugar" removed from the type.
SubRegion(const MemRegion *sReg, Kind k)
Information about invalidation for a particular region/symbol.
MemRegionManager * getMemRegionManager() const override
C Language Family Type Representation.
virtual void dumpToStream(raw_ostream &os) const
BlockCodeRegion - A region that represents code texts of blocks (closures).
Decl - This represents one declaration (or definition), e.g.
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
const ValueDecl * getDecl() const
QualType getLocationType() const override
const NamedDecl * getDecl() const
const MemRegion * getRegion() const
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
MemSpaceRegion - A memory region that represents a "memory space"; for example, the set of global var...
static bool classof(const MemRegion *region)
const ObjCStringLiteral * getObjCStringLiteral() const
static bool classof(const MemRegion *R)
Value representing integer constant.
const CXXBaseObjectRegion * getCXXBaseObjectRegionWithSuper(const CXXBaseObjectRegion *baseReg, const SubRegion *superRegion)
Create a CXXBaseObjectRegion with the same CXXRecordDecl but a different super region.
AllocaRegion - A region that represents an untyped blob of bytes created by a call to 'alloca'...
static bool classof(const MemRegion *R)
bool operator==(const referenced_vars_iterator &I) const
CodeSpaceRegion - The memory space that holds the executable code of functions and blocks...
CharUnits getOffset() const
ASTContext & getContext()
Represents a variable declaration or definition.
CompoundLiteralExpr - [C99 6.5.2.5].
const T * getAs() const
Member-template getAs<specific type>'.
DeclRegion(const ValueDecl *d, const MemRegion *sReg, Kind k)
QualType getElementType() const
AnalysisDeclContext * getAnalysisDeclContext() const
CXXThisRegion - Represents the region for the implicit 'this' parameter in a call to a C++ method...
const MemRegion * getSuperRegion() const
const SymbolicRegion * getSymbolicBase() const
If this is a symbolic region, returns the region.
GlobalsSpaceRegion(MemRegionManager *mgr, Kind k)
The region containing globals which can be modified by calls to "internally" defined functions - (for...
The region associated with an ObjCStringLiteral.
Represents a class type in Objective C.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
const VarRegion * getOriginalRegion() const
const FieldDecl * getDecl() const
Represents a member of a struct/union/class.
ASTContext & getContext() const
AnalysisDeclContext contains the context data for the function or method under analysis.
QualType getLocationType() const override
bool isReferenceType() const
static CharUnits Zero()
Zero - Construct a CharUnits quantity of zero.
__DEVICE__ int max(int __a, int __b)
virtual DefinedOrUnknownSVal getExtent(SValBuilder &svalBuilder) const
getExtent - Returns the size of the region in bytes.
QualType getValueType() const override
bool isBoundable() const override
The region containing globals which are considered not to be modified or point to data which could be...
static bool classof(const MemRegion *R)
BlockDataRegion - A region that represents a block instance.
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *region)
CharUnits - This is an opaque type for sizes expressed in character units.
static void dump(llvm::raw_ostream &OS, StringRef FunctionName, ArrayRef< CounterExpression > Expressions, ArrayRef< CounterMappingRegion > Regions)
const CXXRecordDecl * getDecl() const
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
referenced_vars_iterator(const MemRegion *const *r, const MemRegion *const *originalR)
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
ObjCStringLiteral, used for Objective-C string literals i.e.
static bool classof(const MemRegion *R)
const StringLiteral * getStringLiteral() const
QualType getValueType() const override
Represent a region's offset within the top level base region.
const T * getTypePtr() const
Retrieve the underlying type pointer, which refers to a canonical type.
static void ProfileRegion(llvm::FoldingSetNodeID &ID, const Decl *D, const MemRegion *superRegion, Kind k)
virtual QualType getType() const =0
static bool classof(const MemRegion *R)
QualType getValueType() const override
const VarRegion * getCapturedRegion() const
bool operator!=(const referenced_vars_iterator &I) const
static bool classof(const MemRegion *R)
const RegionTy * getAs() const
SymbolicRegion - A special, "non-concrete" region.
bool isCanonicalDecl() const
Whether this particular Decl is a canonical one.
Represents a block literal declaration, which is like an unnamed FunctionDecl.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
This represents one expression.
TypedValueRegion(const MemRegion *sReg, Kind k)
static const int64_t Symbolic
llvm::BumpPtrAllocator & getAllocator()
static bool classof(const MemRegion *R)
QualType getDesugaredValueType(ASTContext &Context) const
const BlockCodeRegion * getCodeRegion() const
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
bool isNull() const
Return true if this QualType doesn't point to a type yet.
static bool classof(const MemRegion *R)
TypedRegion(const MemRegion *sReg, Kind k)
const StackFrameContext * getStackFrame() const
The region of the static variables within the current CodeTextRegion scope.
Optional< T > getAs() const
Convert to the specified SVal type, returning None if this SVal is not of the desired type...
const VarDecl * getDecl() const
virtual bool isBoundable() const
The region for all the non-static global variables.
static bool classof(const MemRegion *R)
const BlockDecl * getDecl() const
QualType getValueType() const override
static bool classof(const MemRegion *R)
FunctionCodeRegion - A region that represents code texts of function.
SymbolRef getSymbol() const
const CompoundLiteralExpr * getLiteralExpr() const
bool isBoundable() const override
static bool classof(const MemRegion *R)
SVal - This represents a symbolic expression, which can be either an L-value or an R-value...
bool isBoundable() const override
bool isAnyPointerType() const
QualType getLocationType() const override
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
bool isBoundable() const override
static bool classof(const MemRegion *R)
Dataflow Directional Tag Classes.
raw_ostream & operator<<(raw_ostream &Out, const CheckerBase &Checker)
Dump checker name to stream.
QualType getValueType() const override
InvalidationKinds
Describes different invalidation traits.
const MemRegion * getRegion() const
bool isBoundable() const override
QualType getLocationType() const override
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
const Expr * getExpr() const
static bool classof(const MemRegion *R)
static bool classof(const OMPClause *T)
bool isBoundable() const override
T castAs() const
Convert to the specified SVal type, asserting that this SVal is of the desired type.
SubRegion - A region that subsets another larger region.
The region containing globals which are defined in system/external headers and are considered modifia...
StackSpaceRegion(MemRegionManager *mgr, Kind k, const StackFrameContext *sfc)
int64_t getOffset() const
referenced_vars_iterator & operator++()
const Type * getTypePtrOrNull() const
const CodeTextRegion * getCodeRegion() const
const BlockDecl * getDecl() const
MemSpaceRegion(MemRegionManager *mgr, Kind k)
void Profile(llvm::FoldingSetNodeID &ID) const override
const Expr * getExpr() const
Defines the clang::SourceLocation class and associated facilities.
Represents a C++ struct/union/class.
static bool classof(const MemRegion *R)
void Profile(llvm::FoldingSetNodeID &ID) const override
ObjCIvarDecl - Represents an ObjC instance variable.
QualType getValueType() const override
static bool classof(const MemRegion *R)
static bool classof(const MemRegion *R)
QualType getPointerType(QualType T) const
Return the uniqued reference to the type for a pointer to the specified type.
unsigned kind
All of the diagnostics that can be emitted by the frontend.
StringLiteral - This represents a string literal expression, e.g.
QualType getDesugaredLocationType(ASTContext &Context) const
StringRegion - Region associated with a StringLiteral.
const FieldRegion * getFieldRegionWithSuper(const FieldRegion *FR, const SubRegion *superRegion)
ElementRegion is used to represent both array elements and casts.
QualType getValueType() const override
MemRegionManager(ASTContext &c, llvm::BumpPtrAllocator &a)
const llvm::APSInt & getValue() const
A trivial tuple used to represent a source range.
This represents a decl that may have a name.
QualType getObjCObjectPointerType(QualType OIT) const
Return a ObjCObjectPointerType type for the given ObjCObjectType.
static bool classof(const MemRegion *R)
const MemRegion * superRegion
static bool classof(const MemRegion *R)
bool isBoundable() const override
bool hasSymbolicOffset() const
NonStaticGlobalSpaceRegion(MemRegionManager *mgr, Kind k)
TypedRegion - An abstract class representing regions that are typed.
static bool classof(const MemRegion *R)