summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/CFRefCount.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-04-09 16:13:17 +0000
committerTed Kremenek <kremenek@apple.com>2009-04-09 16:13:17 +0000
commitaa4cfc26040e4ddd5150f588b0890b4fac77f8be (patch)
tree68c6b3645d17779a0886fa9665c17a91946eaf04 /clang/lib/Analysis/CFRefCount.cpp
parenta04ede8d5b26ecb115966d0b4eabcc3a2461981f (diff)
downloadbcm5719-llvm-aa4cfc26040e4ddd5150f588b0890b4fac77f8be.tar.gz
bcm5719-llvm-aa4cfc26040e4ddd5150f588b0890b4fac77f8be.zip
analyzer: Introduce a new class, ValueManager, that serves as an aggregate
"manager of symbolic values", wrapping BasicValueFactory, SymbolManager, and MemRegionManager. While these individual managers nicely separate functionality in the analyzer, constructing symbolic values can sometimes be cumbersome because it requires using multiple managers at once. The goal of this class is to create some factory methods to create SVals that require the use of these different managers, thus (hopefully) simplifying the analyzer API for clients. llvm-svn: 68709
Diffstat (limited to 'clang/lib/Analysis/CFRefCount.cpp')
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp28
1 files changed, 12 insertions, 16 deletions
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index 482662c19e1..267fc0be1a2 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -1884,14 +1884,12 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<GRState>& Dst,
case RetEffect::OwnedAllocatedSymbol:
case RetEffect::OwnedSymbol: {
unsigned Count = Builder.getCurrentBlockCount();
- SymbolRef Sym = Eng.getSymbolManager().getConjuredSymbol(Ex, Count);
- QualType RetT = GetReturnType(Ex, Eng.getContext());
- state =
- state.set<RefBindings>(Sym, RefVal::makeOwned(RE.getObjKind(), RetT));
- MemRegionManager& MRMgr = Eng.getStoreManager().getRegionManager();
- state = state.BindExpr(Ex, Loc::MakeVal(MRMgr.getSymbolicRegion(Sym)),
- false);
-
+ ValueManager &ValMgr = Eng.getValueManager();
+ SymbolRef Sym = ValMgr.getConjuredSymbol(Ex, Count);
+ QualType RetT = GetReturnType(Ex, ValMgr.getContext());
+ state = state.set<RefBindings>(Sym, RefVal::makeOwned(RE.getObjKind(),
+ RetT));
+ state = state.BindExpr(Ex, ValMgr.makeRegionVal(Sym), false);
// FIXME: Add a flag to the checker where allocations are assumed to
// *not fail.
@@ -1908,14 +1906,12 @@ void CFRefCount::EvalSummary(ExplodedNodeSet<GRState>& Dst,
case RetEffect::NotOwnedSymbol: {
unsigned Count = Builder.getCurrentBlockCount();
- SymbolRef Sym = Eng.getSymbolManager().getConjuredSymbol(Ex, Count);
- QualType RetT = GetReturnType(Ex, Eng.getContext());
-
- state =
- state.set<RefBindings>(Sym, RefVal::makeNotOwned(RE.getObjKind(),RetT));
- MemRegionManager& MRMgr = Eng.getStoreManager().getRegionManager();
- state = state.BindExpr(Ex, Loc::MakeVal(MRMgr.getSymbolicRegion(Sym)),
- false);
+ ValueManager &ValMgr = Eng.getValueManager();
+ SymbolRef Sym = ValMgr.getConjuredSymbol(Ex, Count);
+ QualType RetT = GetReturnType(Ex, ValMgr.getContext());
+ state = state.set<RefBindings>(Sym, RefVal::makeNotOwned(RE.getObjKind(),
+ RetT));
+ state = state.BindExpr(Ex, ValMgr.makeRegionVal(Sym), false);
break;
}
}
OpenPOWER on IntegriCloud