diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-01-09 09:16:47 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-01-09 09:16:47 +0000 |
commit | bc37b8dd9914e02580f531fa6e5e72be34d9675e (patch) | |
tree | e1dfe8fab77de3a9ff2679dbb4ea65749aeb6007 /lib/Analysis/MemRegion.cpp | |
parent | 7a7ca281bcf50b34de1ce067d3c55879b81722ae (diff) |
When binding an rvalue to a reference, create a temporary object. Use
CXXObjectRegion to represent it.
In Environment, lookup a literal expression before make up a value for it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93047 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/MemRegion.cpp')
-rw-r--r-- | lib/Analysis/MemRegion.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/Analysis/MemRegion.cpp b/lib/Analysis/MemRegion.cpp index 5be882ad54..c17e4e83ee 100644 --- a/lib/Analysis/MemRegion.cpp +++ b/lib/Analysis/MemRegion.cpp @@ -304,14 +304,14 @@ void BlockDataRegion::Profile(llvm::FoldingSetNodeID& ID) const { } void CXXObjectRegion::ProfileRegion(llvm::FoldingSetNodeID &ID, - QualType T, + Expr const *Ex, const MemRegion *sReg) { - ID.AddPointer(T.getTypePtr()); + ID.AddPointer(Ex); ID.AddPointer(sReg); } void CXXObjectRegion::Profile(llvm::FoldingSetNodeID &ID) const { - ProfileRegion(ID, T, getSuperRegion()); + ProfileRegion(ID, Ex, getSuperRegion()); } //===----------------------------------------------------------------------===// @@ -580,8 +580,11 @@ MemRegionManager::getObjCIvarRegion(const ObjCIvarDecl* d, } const CXXObjectRegion* -MemRegionManager::getCXXObjectRegion(QualType T) { - return getSubRegion<CXXObjectRegion>(T, getUnknownRegion()); +MemRegionManager::getCXXObjectRegion(Expr const *E, + LocationContext const *LC) { + const StackFrameContext *SFC = LC->getCurrentStackFrame(); + assert(SFC); + return getSubRegion<CXXObjectRegion>(E, getStackLocalsRegion(SFC)); } const CXXThisRegion* |