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" 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;
172 template<
typename RegionTy>
const RegionTy* castAs()
const;
184 std::string getDescriptiveName(
bool UseQuotes =
true)
const;
213 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
217 return k >= BEGIN_MEMSPACES && k <= END_MEMSPACES;
230 void dumpToStream(raw_ostream &os)
const override;
233 return R->
getKind() == CodeSpaceRegionKind;
238 virtual void anchor();
248 return k >= BEGIN_GLOBAL_MEMSPACES && k <= END_GLOBAL_MEMSPACES;
268 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
270 void dumpToStream(raw_ostream &os)
const override;
275 return R->
getKind() == StaticGlobalSpaceRegionKind;
286 void anchor()
override;
297 return k >= BEGIN_NON_STATIC_GLOBAL_MEMSPACES &&
298 k <= END_NON_STATIC_GLOBAL_MEMSPACES;
311 void dumpToStream(raw_ostream &os)
const override;
314 return R->
getKind() == GlobalSystemSpaceRegionKind;
330 void dumpToStream(raw_ostream &os)
const override;
333 return R->
getKind() == GlobalImmutableSpaceRegionKind;
347 void dumpToStream(raw_ostream &os)
const override;
350 return R->
getKind() == GlobalInternalSpaceRegionKind;
361 void dumpToStream(raw_ostream &os)
const override;
364 return R->
getKind() == HeapSpaceRegionKind;
375 void dumpToStream(raw_ostream &os)
const override;
378 return R->
getKind() == UnknownSpaceRegionKind;
383 virtual void anchor();
397 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
401 return k >= BEGIN_STACK_MEMSPACES && k <= END_STACK_MEMSPACES;
412 void dumpToStream(raw_ostream &os)
const override;
415 return R->
getKind() == StackLocalsSpaceRegionKind;
427 void dumpToStream(raw_ostream &os)
const override;
430 return R->
getKind() == StackArgumentsSpaceRegionKind;
437 virtual void anchor();
459 bool isSubRegionOf(
const MemRegion* R)
const override;
462 return R->
getKind() > END_MEMSPACES;
482 :
SubRegion(superRegion, AllocaRegionKind), Cnt(cnt), Ex(ex) {
486 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const Expr *Ex,
487 unsigned Cnt,
const MemRegion *superRegion);
496 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
498 void dumpToStream(raw_ostream &os)
const override;
501 return R->
getKind() == AllocaRegionKind;
507 void anchor()
override;
515 virtual QualType getLocationType()
const = 0;
525 return k >= BEGIN_TYPED_REGIONS && k <= END_TYPED_REGIONS;
531 void anchor()
override;
539 virtual QualType getValueType()
const = 0;
559 return k >= BEGIN_TYPED_VALUE_REGIONS && k <= END_TYPED_VALUE_REGIONS;
564 void anchor()
override;
576 return k >= BEGIN_CODE_TEXT_REGIONS && k <= END_CODE_TEXT_REGIONS;
588 assert(isa<ObjCMethodDecl>(fd) || isa<FunctionDecl>(fd));
591 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const NamedDecl *FD,
597 if (
const auto *D = dyn_cast<FunctionDecl>(FD)) {
601 assert(isa<ObjCMethodDecl>(FD));
602 assert(
false &&
"Getting the type of ObjCMethod is not supported yet");
613 void dumpToStream(raw_ostream &os)
const override;
615 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
618 return R->
getKind() == FunctionCodeRegionKind;
637 :
CodeTextRegion(sreg, BlockCodeRegionKind), BD(bd), AC(ac), locTy(lTy) {
643 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const BlockDecl *BD,
658 void dumpToStream(raw_ostream &os)
const override;
660 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
663 return R->
getKind() == BlockCodeRegionKind;
679 void *ReferencedVars =
nullptr;
680 void *OriginalVars =
nullptr;
684 :
TypedRegion(sreg, BlockDataRegionKind), BC(bc), LC(lc),
688 assert(isa<GlobalImmutableSpaceRegion>(sreg) ||
689 isa<StackLocalsSpaceRegion>(sreg) ||
690 isa<UnknownSpaceRegion>(sreg));
693 static void ProfileRegion(llvm::FoldingSetNodeID&,
const BlockCodeRegion *,
711 : R(r), OriginalR(originalR) {}
714 return cast<VarRegion>(*R);
718 return cast<VarRegion>(*OriginalR);
722 assert((R ==
nullptr) == (I.R ==
nullptr));
727 assert((R ==
nullptr) == (I.R ==
nullptr));
745 void dumpToStream(raw_ostream &os)
const override;
747 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
750 return R->
getKind() == BlockDataRegionKind;
754 void LazyInitializeReferencedVars();
755 std::pair<const VarRegion *, const VarRegion *>
756 getCaptureRegions(
const VarDecl *VD);
770 :
SubRegion(sreg, SymbolicRegionKind), sym(s) {
773 assert(s && isa<SymbolData>(s));
777 assert(isa<UnknownSpaceRegion>(sreg) || isa<HeapSpaceRegion>(sreg));
787 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
789 static void ProfileRegion(llvm::FoldingSetNodeID& ID,
793 void dumpToStream(raw_ostream &os)
const override;
796 return R->
getKind() == SymbolicRegionKind;
811 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
824 void Profile(llvm::FoldingSetNodeID&
ID)
const override {
825 ProfileRegion(ID, Str, superRegion);
828 void dumpToStream(raw_ostream &os)
const override;
831 return R->
getKind() == StringRegionKind;
847 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
858 void Profile(llvm::FoldingSetNodeID&
ID)
const override {
859 ProfileRegion(ID, Str, superRegion);
862 void dumpToStream(raw_ostream &os)
const override;
865 return R->
getKind() == ObjCStringRegionKind;
881 assert(isa<GlobalInternalSpaceRegion>(sReg) ||
882 isa<StackLocalsSpaceRegion>(sReg));
885 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
894 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
896 void dumpToStream(raw_ostream &os)
const override;
901 return R->
getKind() == CompoundLiteralRegionKind;
915 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const Decl *D,
920 void Profile(llvm::FoldingSetNodeID& ID)
const override;
924 return k >= BEGIN_DECL_REGIONS && k <= END_DECL_REGIONS;
938 assert(isa<GlobalsSpaceRegion>(sReg) || isa<StackSpaceRegion>(sReg) ||
939 isa<BlockDataRegion>(sReg) || isa<UnknownSpaceRegion>(sReg));
942 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const VarDecl *VD,
948 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
956 return getDecl()->getType();
959 void dumpToStream(raw_ostream &os)
const override;
961 bool canPrintPrettyAsExpr()
const override;
963 void printPrettyAsExpr(raw_ostream &os)
const override;
966 return R->
getKind() == VarRegionKind;
979 ThisPointerTy(thisPointerTy) {
980 assert(ThisPointerTy->getPointeeType()->getAsCXXRecordDecl() &&
981 "Invalid region type!");
984 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
989 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
995 void dumpToStream(raw_ostream &os)
const override;
998 return R->
getKind() == CXXThisRegionKind;
1011 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const FieldDecl *FD,
1021 return getDecl()->getType();
1026 void dumpToStream(raw_ostream &os)
const override;
1028 bool canPrintPretty()
const override;
1029 void printPretty(raw_ostream &os)
const override;
1030 bool canPrintPrettyAsExpr()
const override;
1031 void printPrettyAsExpr(raw_ostream &os)
const override;
1034 return R->
getKind() == FieldRegionKind;
1043 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
const ObjCIvarDecl *ivd,
1048 QualType getValueType()
const override;
1050 bool canPrintPrettyAsExpr()
const override;
1051 void printPrettyAsExpr(raw_ostream &os)
const override;
1053 void dumpToStream(raw_ostream &os)
const override;
1056 return R->
getKind() == ObjCIvarRegionKind;
1071 : Region(reg), Offset(offset) {}
1078 void dumpToStream(raw_ostream &os)
const;
1094 "The index must be signed");
1096 "Invalid region type!");
1099 static void ProfileRegion(llvm::FoldingSetNodeID&
ID,
QualType elementType,
1112 void dumpToStream(raw_ostream &os)
const override;
1114 void Profile(llvm::FoldingSetNodeID&
ID)
const override;
1117 return R->
getKind() == ElementRegionKind;
1130 assert(isa<StackLocalsSpaceRegion>(sReg) ||
1131 isa<GlobalInternalSpaceRegion>(sReg));
1134 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
1142 void dumpToStream(raw_ostream &os)
const override;
1144 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1147 return R->
getKind() == CXXTempObjectRegionKind;
1156 llvm::PointerIntPair<const CXXRecordDecl *, 1, bool> Data;
1164 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
const CXXRecordDecl *RD,
1171 QualType getValueType()
const override;
1173 void dumpToStream(raw_ostream &os)
const override;
1175 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1177 bool canPrintPrettyAsExpr()
const override;
1179 void printPrettyAsExpr(raw_ostream &os)
const override;
1182 return region->
getKind() == CXXBaseObjectRegionKind;
1203 "Should have unwrapped a base region instead!");
1206 static void ProfileRegion(llvm::FoldingSetNodeID &
ID,
const CXXRecordDecl *RD,
1212 QualType getValueType()
const override;
1214 void dumpToStream(raw_ostream &os)
const override;
1216 void Profile(llvm::FoldingSetNodeID &
ID)
const override;
1218 bool canPrintPrettyAsExpr()
const override;
1220 void printPrettyAsExpr(raw_ostream &os)
const override;
1223 return region->
getKind() == CXXDerivedObjectRegionKind;
1227 template<
typename RegionTy>
1229 if (
const auto *RT = dyn_cast<RegionTy>(
this))
1235 template<
typename RegionTy>
1237 return cast<RegionTy>(
this);
1246 llvm::BumpPtrAllocator& A;
1247 llvm::FoldingSet<MemRegion> Regions;
1253 llvm::DenseMap<const StackFrameContext *, StackLocalsSpaceRegion *>
1254 StackLocalsSpaceRegions;
1255 llvm::DenseMap<const StackFrameContext *, StackArgumentsSpaceRegion *>
1256 StackArgumentsSpaceRegions;
1257 llvm::DenseMap<const CodeTextRegion *, StaticGlobalSpaceRegion *>
1258 StaticsGlobalSpaceRegions;
1352 return getFieldRegion(FR->
getDecl(), superRegion);
1378 return getCXXBaseObjectRegion(baseReg->
getDecl(), superRegion,
1401 unsigned blockCount);
1409 template <
typename RegionTy,
typename SuperTy,
1411 RegionTy* getSubRegion(
const Arg1Ty arg1,
1412 const SuperTy* superRegion);
1414 template <
typename RegionTy,
typename SuperTy,
1415 typename Arg1Ty,
typename Arg2Ty>
1416 RegionTy* getSubRegion(
const Arg1Ty arg1,
const Arg2Ty arg2,
1417 const SuperTy* superRegion);
1419 template <
typename RegionTy,
typename SuperTy,
1420 typename Arg1Ty,
typename Arg2Ty,
typename Arg3Ty>
1421 RegionTy* getSubRegion(
const Arg1Ty arg1,
const Arg2Ty arg2,
1423 const SuperTy* superRegion);
1425 template <
typename REG>
1426 const REG* LazyAllocate(REG*& region);
1428 template <
typename REG,
typename ARG>
1429 const REG* LazyAllocate(REG*& region, ARG a);
1437 return getMemRegionManager()->getContext();
1446 using StorageTypeForKinds =
unsigned char;
1448 llvm::DenseMap<const MemRegion *, StorageTypeForKinds> MRTraitsMap;
1449 llvm::DenseMap<SymbolRef, StorageTypeForKinds> SymTraitsMap;
1451 using const_region_iterator =
1452 llvm::DenseMap<const MemRegion *, StorageTypeForKinds>::const_iterator;
1453 using const_symbol_iterator =
1454 llvm::DenseMap<SymbolRef, StorageTypeForKinds>::const_iterator;
1460 TK_PreserveContents = 0x1,
1463 TK_SuppressEscape = 0x2,
1466 TK_DoNotInvalidateSuperRegion = 0x4,
1470 TK_EntireMemSpace = 0x8
1494 #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
const RegionTy * castAs() const
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)