From: Ted Kremenek Date: Wed, 7 Jan 2009 22:56:17 +0000 (+0000) Subject: Update some doxygen comments to be more rich. Remove StoreManager::GetRegionSVal. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c6ed3840d685bd40bd921dd1f76cfb5a9b4fc599;p=clang Update some doxygen comments to be more rich. Remove StoreManager::GetRegionSVal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61894 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Analysis/PathSensitive/GRState.h b/include/clang/Analysis/PathSensitive/GRState.h index 27df2bbdb6..59de60084d 100644 --- a/include/clang/Analysis/PathSensitive/GRState.h +++ b/include/clang/Analysis/PathSensitive/GRState.h @@ -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) { diff --git a/include/clang/Analysis/PathSensitive/Store.h b/include/clang/Analysis/PathSensitive/Store.h index be8ee458cb..b43699e72b 100644 --- a/include/clang/Analysis/PathSensitive/Store.h +++ b/include/clang/Analysis/PathSensitive/Store.h @@ -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; - - /// GetRegionSVal - 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 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; + +// /// Retrieves the value bound to the specified region. +// SVal GetRegionSVal(const GRState* state, const MemRegion* R) { +// return Retrieve(state, loc::MemRegionVal(R)); +// } + + /// 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; diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp index 9e469c0b5d..b223114a51 100644 --- a/lib/Analysis/BasicStore.cpp +++ b/lib/Analysis/BasicStore.cpp @@ -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(LV)) + if (isa(loc)) return UnknownVal(); - assert (!isa(LV)); + assert (!isa(loc)); - switch (LV.getSubKind()) { + switch (loc.getSubKind()) { case loc::MemRegionKind: { const VarRegion* R = - dyn_cast(cast(LV).getRegion()); + dyn_cast(cast(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(cast(LV).getRegion()); + dyn_cast(cast(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(cast(LV).getRegion()); + dyn_cast(cast(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)