aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-11 21:57:34 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-11 21:57:34 +0000
commitb2dea734527ae75281642a1c6ace28f9e00cab11 (patch)
tree4518bd355cc4ddc15f3e75f49d2b455feb60fee5
parent21e6f176015f8ffa0f162618c03f6d63746361ef (diff)
Add TypedViewRegion::isBoundable() to indicate whether or not the
TypedViewRegion has a valid rvalue type. Also renamed instance variable 'T' to 'LvalueType' to make it unambiguous of its purpose. This fixes some crashes I was seeing after: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20090309/013771.html This is because 'isBoundable()' is defined in TypedRegion (the parent class) in terms of the rvalue type (which could be null), while for TypedViewRegion it should be defined in terms of the lvalue type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66712 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Analysis/PathSensitive/MemRegion.h17
-rw-r--r--lib/Analysis/MemRegion.cpp2
2 files changed, 12 insertions, 7 deletions
diff --git a/include/clang/Analysis/PathSensitive/MemRegion.h b/include/clang/Analysis/PathSensitive/MemRegion.h
index 10bef309ac..b6e4ccb274 100644
--- a/include/clang/Analysis/PathSensitive/MemRegion.h
+++ b/include/clang/Analysis/PathSensitive/MemRegion.h
@@ -239,10 +239,10 @@ public:
class TypedViewRegion : public TypedRegion {
friend class MemRegionManager;
- QualType T;
+ QualType LValueType;
- TypedViewRegion(QualType t, const MemRegion* sreg)
- : TypedRegion(sreg, TypedViewRegionKind), T(t) {}
+ TypedViewRegion(QualType lvalueType, const MemRegion* sreg)
+ : TypedRegion(sreg, TypedViewRegionKind), LValueType(lvalueType) {}
static void ProfileRegion(llvm::FoldingSetNodeID& ID, QualType T,
const MemRegion* superRegion);
@@ -252,13 +252,17 @@ public:
void print(llvm::raw_ostream& os) const;
QualType getRValueType(ASTContext&) const {
- const PointerType* PTy = T->getAsPointerType();
+ const PointerType* PTy = LValueType->getAsPointerType();
assert(PTy);
return PTy->getPointeeType();
}
+
+ bool isBoundable(ASTContext &C) const {
+ return isa<PointerType>(LValueType);
+ }
void Profile(llvm::FoldingSetNodeID& ID) const {
- ProfileRegion(ID, T, superRegion);
+ ProfileRegion(ID, LValueType, superRegion);
}
static bool classof(const MemRegion* R) {
@@ -561,7 +565,8 @@ public:
ObjCIvarRegion* getObjCIvarRegion(const ObjCIvarDecl* ivd,
const MemRegion* superRegion);
- TypedViewRegion* getTypedViewRegion(QualType t, const MemRegion* superRegion);
+ TypedViewRegion* getTypedViewRegion(QualType LValueType,
+ const MemRegion* superRegion);
bool hasStackStorage(const MemRegion* R);
diff --git a/lib/Analysis/MemRegion.cpp b/lib/Analysis/MemRegion.cpp
index c304b659b6..5bfc989eb8 100644
--- a/lib/Analysis/MemRegion.cpp
+++ b/lib/Analysis/MemRegion.cpp
@@ -172,7 +172,7 @@ void AllocaRegion::print(llvm::raw_ostream& os) const {
}
void TypedViewRegion::print(llvm::raw_ostream& os) const {
- os << "typed_view{" << T.getAsString() << ',';
+ os << "typed_view{" << LValueType.getAsString() << ',';
getSuperRegion()->print(os);
os << '}';
}