Update some doxygen comments to be more rich. Remove StoreManager::GetRegionSVal.

llvm-svn: 61894
This commit is contained in:
Ted Kremenek 2009-01-07 22:56:17 +00:00
parent 6ecd6f43b0
commit f929b0aefe
3 changed files with 38 additions and 27 deletions

View File

@ -474,7 +474,7 @@ public:
}
SVal GetSVal(const GRState* state, const MemRegion* R) {
return StoreMgr->GetRegionSVal(state, R);
return StoreMgr->Retrieve(state, loc::MemRegionVal(R));
}
const GRState* BindLoc(const GRState* St, Loc LV, SVal V) {

View File

@ -47,18 +47,29 @@ protected:
public:
virtual ~StoreManager() {}
/// Retrieve - Retrieves the value bound to specified location. The optional
/// QualType information provides a hint to the store indicating the expected
/// type of the returned value.
virtual SVal Retrieve(const GRState* state, Loc LV, QualType T=QualType()) =0;
/// Return the value bound to specified location in a given state.
/// \param[in] state The analysis state.
/// \param[in] loc The symbolic memory location.
/// \param[in] T An optional type that provides a hint indicating the
/// expected type of the returned value. This is used if the value is
/// lazily computed.
/// \return The value bound to the location \c loc.
virtual SVal Retrieve(const GRState* state, Loc loc,
QualType T = QualType()) = 0;
/// GetRegionSVal - Retrieves the value bound to the specified region.
SVal GetRegionSVal(const GRState* state, const MemRegion* R) {
return Retrieve(state, loc::MemRegionVal(R));
}
// /// Retrieves the value bound to the specified region.
// SVal GetRegionSVal(const GRState* state, const MemRegion* R) {
// return Retrieve(state, loc::MemRegionVal(R));
// }
/// Bind value V to location L.
virtual const GRState* Bind(const GRState* St, Loc L, SVal V) = 0;
/// Return a state with the specified value bound to the given location.
/// \param[in] state The analysis state.
/// \param[in] loc The symbolic memory location.
/// \param[in] val The value to bind to location \c loc.
/// \return A pointer to a GRState object that contains the same bindings as
/// \c state with the addition of having the value specified by \c val bound
/// to the location given for \c loc.
virtual const GRState* Bind(const GRState* state, Loc loc, SVal val) = 0;
virtual Store Remove(Store St, Loc L) = 0;

View File

@ -37,7 +37,7 @@ public:
~BasicStoreManager() {}
SVal Retrieve(const GRState *state, Loc LV, QualType T);
SVal Retrieve(const GRState *state, Loc loc, QualType T = QualType());
const GRState* Bind(const GRState* St, Loc L, SVal V) {
Store store = St->getStore();
@ -45,8 +45,8 @@ public:
return StateMgr.MakeStateWithStore(St, store);
}
Store BindInternal(Store St, Loc LV, SVal V);
Store Remove(Store St, Loc LV);
Store BindInternal(Store St, Loc loc, SVal V);
Store Remove(Store St, Loc loc);
Store getInitialStore();
// FIXME: Investigate what is using this. This method should be removed.
@ -263,18 +263,18 @@ SVal BasicStoreManager::getLValueElement(const GRState* St, SVal Base,
return UnknownVal();
}
SVal BasicStoreManager::Retrieve(const GRState* state, Loc LV, QualType T) {
SVal BasicStoreManager::Retrieve(const GRState* state, Loc loc, QualType T) {
if (isa<UnknownVal>(LV))
if (isa<UnknownVal>(loc))
return UnknownVal();
assert (!isa<UndefinedVal>(LV));
assert (!isa<UndefinedVal>(loc));
switch (LV.getSubKind()) {
switch (loc.getSubKind()) {
case loc::MemRegionKind: {
const VarRegion* R =
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(LV).getRegion());
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(loc).getRegion());
if (!R)
return UnknownVal();
@ -294,7 +294,7 @@ SVal BasicStoreManager::Retrieve(const GRState* state, Loc LV, QualType T) {
// invalidate their bindings). Just return Undefined.
return UndefinedVal();
case loc::FuncValKind:
return LV;
return loc;
default:
assert (false && "Invalid Loc.");
@ -304,11 +304,11 @@ SVal BasicStoreManager::Retrieve(const GRState* state, Loc LV, QualType T) {
return UnknownVal();
}
Store BasicStoreManager::BindInternal(Store store, Loc LV, SVal V) {
switch (LV.getSubKind()) {
Store BasicStoreManager::BindInternal(Store store, Loc loc, SVal V) {
switch (loc.getSubKind()) {
case loc::MemRegionKind: {
const VarRegion* R =
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(LV).getRegion());
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(loc).getRegion());
if (!R)
return store;
@ -324,11 +324,11 @@ Store BasicStoreManager::BindInternal(Store store, Loc LV, SVal V) {
}
}
Store BasicStoreManager::Remove(Store store, Loc LV) {
switch (LV.getSubKind()) {
Store BasicStoreManager::Remove(Store store, Loc loc) {
switch (loc.getSubKind()) {
case loc::MemRegionKind: {
const VarRegion* R =
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(LV).getRegion());
dyn_cast<VarRegion>(cast<loc::MemRegionVal>(loc).getRegion());
if (!R)
return store;
@ -379,7 +379,7 @@ BasicStoreManager::RemoveDeadBindings(const GRState* state, Stmt* Loc,
break;
Marked.insert(R);
SVal X = GetRegionSVal(state, R);
SVal X = Retrieve(state, loc::MemRegionVal(R));
// FIXME: We need to handle symbols nested in region definitions.
for (symbol_iterator SI=X.symbol_begin(), SE=X.symbol_end(); SI!=SE; ++SI)