[cfe-commits] r60870 - in /cfe/trunk: include/clang/Analysis/PathSensitive/MemRegion.h lib/Analysis/MemRegion.cpp
Zhongxing Xu
xuzhongxing at gmail.com
Thu Dec 11 01:08:56 PST 2008
Author: zhongxingxu
Date: Thu Dec 11 03:08:46 2008
New Revision: 60870
URL: http://llvm.org/viewvc/llvm-project?rev=60870&view=rev
Log:
Identify AnonPointeeRegion by the symbol that is concretized.
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=60870&r1=60869&r2=60870&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h Thu Dec 11 03:08:46 2008
@@ -237,25 +237,28 @@
/// parameters or pointer globals. In RegionStoreManager, we assume pointer
/// parameters or globals point at some anonymous region. Such regions are not
/// the regions associated with the pointer variables themselves. They are
-/// identified by the MemRegion of the pointer pointing to them. We create
-/// them lazily.
+/// identified by the symbols that are concretized. We create them lazily.
class AnonPointeeRegion : public TypedRegion {
friend class MemRegionManager;
- // VD - the pointer variable that points at this region.
- const TypedRegion* Pointer;
- AnonPointeeRegion(const TypedRegion* r, MemRegion* sreg)
- : TypedRegion(sreg, AnonPointeeRegionKind), Pointer(r) {}
+ // Sym - the symbol that is concretized.
+ SymbolRef Sym;
+
+ // Ty - the type of the region.
+ QualType T;
+
+ AnonPointeeRegion(SymbolRef sym, QualType t, MemRegion* sreg)
+ : TypedRegion(sreg, AnonPointeeRegionKind), Sym(sym), T(t) {}
public:
QualType getType(ASTContext& C) const;
- static void ProfileRegion(llvm::FoldingSetNodeID& ID, const TypedRegion* R,
+ static void ProfileRegion(llvm::FoldingSetNodeID& ID, SymbolRef Sym,
const MemRegion* superRegion);
void Profile(llvm::FoldingSetNodeID& ID) const {
- ProfileRegion(ID, Pointer, superRegion);
+ ProfileRegion(ID, Sym, superRegion);
}
static bool classof(const MemRegion* R) {
@@ -519,7 +522,7 @@
AnonTypedRegion* getAnonTypedRegion(QualType t, const MemRegion* superRegion);
- AnonPointeeRegion* getAnonPointeeRegion(const TypedRegion* r);
+ AnonPointeeRegion* getAnonPointeeRegion(SymbolRef Sym, QualType T);
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=60870&r1=60869&r2=60870&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/MemRegion.cpp (original)
+++ cfe/trunk/lib/Analysis/MemRegion.cpp Thu Dec 11 03:08:46 2008
@@ -52,18 +52,14 @@
}
QualType AnonPointeeRegion::getType(ASTContext& C) const {
- QualType T = C.getCanonicalType(Pointer->getType(C));
- PointerType* PTy = cast<PointerType>(T.getTypePtr());
-
- QualType PointeeTy = C.getCanonicalType(PTy->getPointeeType());
- return PointeeTy;
+ return C.getCanonicalType(T);
}
void AnonPointeeRegion::ProfileRegion(llvm::FoldingSetNodeID& ID,
- const TypedRegion* R,
+ SymbolRef Sym,
const MemRegion* superRegion) {
ID.AddInteger((unsigned) AnonPointeeRegionKind);
- ID.AddPointer(R);
+ Sym.Profile(ID);
ID.AddPointer(superRegion);
}
@@ -394,11 +390,12 @@
return R;
}
-AnonPointeeRegion* MemRegionManager::getAnonPointeeRegion(const TypedRegion* r) {
+AnonPointeeRegion* MemRegionManager::getAnonPointeeRegion(SymbolRef Sym,
+ QualType T) {
llvm::FoldingSetNodeID ID;
MemRegion* superRegion = getUnknownRegion();
- AnonPointeeRegion::ProfileRegion(ID, r, superRegion);
+ AnonPointeeRegion::ProfileRegion(ID, Sym, superRegion);
void* InsertPos;
MemRegion* data = Regions.FindNodeOrInsertPos(ID, InsertPos);
@@ -406,7 +403,7 @@
if (!R) {
R = (AnonPointeeRegion*) A.Allocate<AnonPointeeRegion>();
- new (R) AnonPointeeRegion(r, superRegion);
+ new (R) AnonPointeeRegion(Sym, T, superRegion);
Regions.InsertNode(R, InsertPos);
}
More information about the cfe-commits
mailing list