diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-04-09 16:13:17 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-04-09 16:13:17 +0000 |
commit | aa4cfc26040e4ddd5150f588b0890b4fac77f8be (patch) | |
tree | 68c6b3645d17779a0886fa9665c17a91946eaf04 /clang/lib/Analysis/CFRefCount.cpp | |
parent | a04ede8d5b26ecb115966d0b4eabcc3a2461981f (diff) | |
download | bcm5719-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.cpp | 28 |
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; } } |