diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-07-15 02:27:32 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-07-15 02:27:32 +0000 |
commit | fb91c70e24e20f8704edf9bc5049ffbe7e234a38 (patch) | |
tree | 4d629ffc854cd8ee0a9b9ff57e370a6dcad72c16 /lib/Analysis/ValueManager.cpp | |
parent | aa8bc7e977ad3c53a8472e8d215d21e1dff042de (diff) |
Introduced the notion of a "derived symbol" using the class SymbolDerived.
SymbolDerived allows us to model symbolic values that are related to other
symbols via a region hierarchy. For example, SymbolDerived can be used to model
individual values of a symbolic array.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75728 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ValueManager.cpp')
-rw-r--r-- | lib/Analysis/ValueManager.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/Analysis/ValueManager.cpp b/lib/Analysis/ValueManager.cpp index 724a2e92d7..c9e24223df 100644 --- a/lib/Analysis/ValueManager.cpp +++ b/lib/Analysis/ValueManager.cpp @@ -118,6 +118,22 @@ SVal ValueManager::getConjuredSymbolVal(const Expr* E, QualType T, return UnknownVal(); } + +SVal ValueManager::getDerivedRegionValueSymbolVal(SymbolRef parentSymbol, + const TypedRegion *R) { + SymbolRef sym = SymMgr.getDerivedSymbol(parentSymbol, R); + + QualType T = R->getValueType(R->getContext()); + + if (Loc::IsLocType(T)) + return loc::MemRegionVal(MemMgr.getSymbolicRegion(sym)); + + if (T->isIntegerType() && T->isScalarType()) + return nonloc::SymbolVal(sym); + + return UnknownVal(); +} + SVal ValueManager::getFunctionPointer(const FunctionDecl* FD) { CodeTextRegion* R = MemMgr.getCodeTextRegion(FD, Context.getPointerType(FD->getType())); |