[cfe-commits] r66712 - in /cfe/trunk: include/clang/Analysis/PathSensitive/MemRegion.h lib/Analysis/MemRegion.cpp
Ted Kremenek
kremenek at apple.com
Wed Mar 11 14:57:34 PDT 2009
Author: kremenek
Date: Wed Mar 11 16:57:34 2009
New Revision: 66712
URL: http://llvm.org/viewvc/llvm-project?rev=66712&view=rev
Log:
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.
Modified:
cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h
cfe/trunk/lib/Analysis/MemRegion.cpp
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h?rev=66712&r1=66711&r2=66712&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h Wed Mar 11 16:57:34 2009
@@ -239,10 +239,10 @@
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 @@
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 @@
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);
Modified: cfe/trunk/lib/Analysis/MemRegion.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/MemRegion.cpp?rev=66712&r1=66711&r2=66712&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/MemRegion.cpp (original)
+++ cfe/trunk/lib/Analysis/MemRegion.cpp Wed Mar 11 16:57:34 2009
@@ -172,7 +172,7 @@
}
void TypedViewRegion::print(llvm::raw_ostream& os) const {
- os << "typed_view{" << T.getAsString() << ',';
+ os << "typed_view{" << LValueType.getAsString() << ',';
getSuperRegion()->print(os);
os << '}';
}
More information about the cfe-commits
mailing list