summaryrefslogtreecommitdiffstats
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
commit0f4b0d27f8e3f2c9a3066f4a025bc90feb529ee0 (patch)
treef935182d5f57c43a57250e268df5d160a8fb86ba
parent99bee42be2dcdd28a5ffc96fb8adc32392f915e9 (diff)
downloadbcm5719-llvm-0f4b0d27f8e3f2c9a3066f4a025bc90feb529ee0.tar.gz
bcm5719-llvm-0f4b0d27f8e3f2c9a3066f4a025bc90feb529ee0.zip
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. llvm-svn: 66712
-rw-r--r--clang/include/clang/Analysis/PathSensitive/MemRegion.h17
-rw-r--r--clang/lib/Analysis/MemRegion.cpp2
2 files changed, 12 insertions, 7 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/MemRegion.h b/clang/include/clang/Analysis/PathSensitive/MemRegion.h
index 10bef309ac3..b6e4ccb2745 100644
--- a/clang/include/clang/Analysis/PathSensitive/MemRegion.h
+++ b/clang/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/clang/lib/Analysis/MemRegion.cpp b/clang/lib/Analysis/MemRegion.cpp
index c304b659b69..5bfc989eb80 100644
--- a/clang/lib/Analysis/MemRegion.cpp
+++ b/clang/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 << '}';
}
OpenPOWER on IntegriCloud