diff --git a/include/clang/Analysis/PathSensitive/SVals.h b/include/clang/Analysis/PathSensitive/SVals.h index d16b3390eb..70c0d09a03 100644 --- a/include/clang/Analysis/PathSensitive/SVals.h +++ b/include/clang/Analysis/PathSensitive/SVals.h @@ -362,7 +362,7 @@ public: namespace loc { -enum Kind { GotoLabelKind, MemRegionKind, FuncValKind, ConcreteIntKind }; +enum Kind { GotoLabelKind, MemRegionKind, ConcreteIntKind }; class GotoLabel : public Loc { public: @@ -415,33 +415,6 @@ public: } }; -class FuncVal : public Loc { -public: - FuncVal(const FunctionDecl* fd) : Loc(FuncValKind, fd) {} - - FunctionDecl* getDecl() const { - return static_cast(Data); - } - - inline bool operator==(const FuncVal& R) const { - return getDecl() == R.getDecl(); - } - - inline bool operator!=(const FuncVal& R) const { - return getDecl() != R.getDecl(); - } - - // Implement isa support. - static inline bool classof(const SVal* V) { - return V->getBaseKind() == LocKind && - V->getSubKind() == FuncValKind; - } - - static inline bool classof(const Loc* V) { - return V->getSubKind() == FuncValKind; - } -}; - class ConcreteInt : public Loc { public: ConcreteInt(const llvm::APSInt& V) : Loc(ConcreteIntKind, &V) {} diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp index 9047d9d8a9..cf8d3176c4 100644 --- a/lib/Analysis/BasicStore.cpp +++ b/lib/Analysis/BasicStore.cpp @@ -200,8 +200,6 @@ SVal BasicStoreManager::getLValueField(const GRState* St, SVal Base, switch(BaseL.getSubKind()) { case loc::GotoLabelKind: - case loc::FuncValKind: - // Technically we can get here if people do funny things with casts. return UndefinedVal(); case loc::MemRegionKind: @@ -234,7 +232,6 @@ SVal BasicStoreManager::getLValueElement(const GRState* St, SVal Base, switch(BaseL.getSubKind()) { case loc::GotoLabelKind: - case loc::FuncValKind: // Technically we can get here if people do funny things with casts. return UndefinedVal(); @@ -338,8 +335,6 @@ SVal BasicStoreManager::Retrieve(const GRState* state, Loc loc, QualType T) { // they are doing a quick scan through their Locs (potentially to // invalidate their bindings). Just return Undefined. return UndefinedVal(); - case loc::FuncValKind: - return loc; default: assert (false && "Invalid Loc."); diff --git a/lib/Analysis/GRSimpleVals.cpp b/lib/Analysis/GRSimpleVals.cpp index 107bea705c..413ef7b5ba 100644 --- a/lib/Analysis/GRSimpleVals.cpp +++ b/lib/Analysis/GRSimpleVals.cpp @@ -307,7 +307,6 @@ SVal GRSimpleVals::EvalEQ(GRExprEngine& Eng, Loc L, Loc R) { // Fall-through. - case loc::FuncValKind: case loc::GotoLabelKind: return NonLoc::MakeIntTruthVal(BasicVals, L == R); } @@ -356,7 +355,6 @@ SVal GRSimpleVals::EvalNE(GRExprEngine& Eng, Loc L, Loc R) { // Fall through: } - case loc::FuncValKind: case loc::GotoLabelKind: return NonLoc::MakeIntTruthVal(BasicVals, L != R); } diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index 215fe1c281..40f7c48131 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -365,7 +365,6 @@ SVal RegionStoreManager::getLValueFieldOrIvar(const GRState* St, SVal Base, break; case loc::GotoLabelKind: - case loc::FuncValKind: // These are anormal cases. Flag an undefined value. return UndefinedVal(); @@ -662,11 +661,6 @@ SVal RegionStoreManager::Retrieve(const GRState* St, Loc L, QualType T) { if (isa(L)) return UndefinedVal(); - // FIXME: Should this be refactored into GRExprEngine or GRStateManager? - // It seems that all StoreManagers would do the same thing here. - if (isa(L)) - return L; - const MemRegion* MR = cast(L).getRegion(); // We return unknown for symbolic region for now. This might be improved. diff --git a/lib/Analysis/SVals.cpp b/lib/Analysis/SVals.cpp index 875fd36747..8eaeda4b7d 100644 --- a/lib/Analysis/SVals.cpp +++ b/lib/Analysis/SVals.cpp @@ -31,10 +31,6 @@ using llvm::APSInt; //===----------------------------------------------------------------------===// const FunctionDecl* SVal::getAsFunctionDecl() const { - if (const loc::FuncVal* FV = dyn_cast(this)) { - return FV->getDecl(); - } - if (const loc::MemRegionVal* X = dyn_cast(this)) { const MemRegion* R = X->getRegion(); if (const CodeTextRegion* CTR = dyn_cast(R)) { @@ -481,11 +477,6 @@ void Loc::print(llvm::raw_ostream& Out) const { Out << '&' << cast(this)->getRegion()->getString(); break; - case loc::FuncValKind: - Out << "function " - << cast(this)->getDecl()->getIdentifier()->getName(); - break; - default: assert (false && "Pretty-printing not implemented for this Loc."); break; diff --git a/lib/Analysis/SimpleConstraintManager.cpp b/lib/Analysis/SimpleConstraintManager.cpp index feaad191ef..f79dba0cc5 100644 --- a/lib/Analysis/SimpleConstraintManager.cpp +++ b/lib/Analysis/SimpleConstraintManager.cpp @@ -116,7 +116,6 @@ SimpleConstraintManager::AssumeAux(const GRState* St, Loc Cond, bool Assumption, // FALL-THROUGH. } - case loc::FuncValKind: case loc::GotoLabelKind: isFeasible = Assumption; return St;