[analyzer] Remove obsolete ObjCPropRef SVal kind.

ObjC properties are handled through their semantic form of ObjCMessageExprs
and their wrapper PseudoObjectExprs, and have been for quite a while. The
syntactic ObjCPropertyRefExprs do not appear in the CFG and are not visited
by ExprEngine.

No functionality change.

llvm-svn: 160458
This commit is contained in:
Jordan Rose 2012-07-18 21:59:37 +00:00
parent be25b07f67
commit 074ebb3a6f
4 changed files with 5 additions and 54 deletions
clang
include/clang/StaticAnalyzer/Core/PathSensitive
lib/StaticAnalyzer/Core

View File

@ -406,7 +406,7 @@ public:
namespace loc {
enum Kind { GotoLabelKind, MemRegionKind, ConcreteIntKind, ObjCPropRefKind };
enum Kind { GotoLabelKind, MemRegionKind, ConcreteIntKind };
class GotoLabel : public Loc {
public:
@ -485,28 +485,6 @@ public:
}
};
/// \brief Pseudo-location SVal used by the ExprEngine to simulate a "load" or
/// "store" of an ObjC property for the dot syntax.
class ObjCPropRef : public Loc {
public:
explicit ObjCPropRef(const ObjCPropertyRefExpr *E)
: Loc(ObjCPropRefKind, E) {}
const ObjCPropertyRefExpr *getPropRefExpr() const {
return static_cast<const ObjCPropertyRefExpr *>(Data);
}
// Implement isa<T> support.
static inline bool classof(const SVal* V) {
return V->getBaseKind() == LocKind &&
V->getSubKind() == ObjCPropRefKind;
}
static inline bool classof(const Loc* V) {
return V->getSubKind() == ObjCPropRefKind;
}
};
} // end ento::loc namespace
} // end GR namespace

View File

@ -96,8 +96,6 @@ SVal Environment::getSVal(const EnvironmentEntry &Entry,
case Stmt::CXXBindTemporaryExprClass:
E = cast<CXXBindTemporaryExpr>(E)->getSubExpr();
continue;
case Stmt::ObjCPropertyRefExprClass:
return loc::ObjCPropRef(cast<ObjCPropertyRefExpr>(E));
case Stmt::ObjCStringLiteralClass: {
MemRegionManager &MRMgr = svalBuilder.getRegionManager();
const ObjCStringLiteral *SL = cast<ObjCStringLiteral>(E);

View File

@ -560,6 +560,10 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
case Expr::MSDependentExistsStmtClass:
llvm_unreachable("Stmt should not be in analyzer evaluation loop");
case Stmt::ObjCSubscriptRefExprClass:
case Stmt::ObjCPropertyRefExprClass:
llvm_unreachable("These are handled by PseudoObjectExpr");
case Stmt::GNUNullExprClass: {
// GNU __null is a pointer-width integer, not an actual pointer.
ProgramStateRef state = Pred->getState();
@ -575,14 +579,6 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
Bldr.addNodes(Dst);
break;
// FIXME.
case Stmt::ObjCSubscriptRefExprClass:
break;
case Stmt::ObjCPropertyRefExprClass:
// Implicitly handled by Environment::getSVal().
break;
case Stmt::ExprWithCleanupsClass:
// Handled due to fully linearised CFG.
break;
@ -1699,10 +1695,6 @@ void ExprEngine::evalStore(ExplodedNodeSet &Dst, const Expr *AssignE,
// ProgramPoint if it is non-NULL, and LocationE otherwise.
const Expr *StoreE = AssignE ? AssignE : LocationE;
if (isa<loc::ObjCPropRef>(location)) {
assert(false);
}
// Evaluate the location (checks for bad dereferences).
ExplodedNodeSet Tmp;
evalLocation(Tmp, AssignE, LocationE, Pred, state, location, tag, false);
@ -1727,7 +1719,6 @@ void ExprEngine::evalLoad(ExplodedNodeSet &Dst,
QualType LoadTy)
{
assert(!isa<NonLoc>(location) && "location cannot be a NonLoc.");
assert(!isa<loc::ObjCPropRef>(location));
// Are we loading from a region? This actually results in two loads; one
// to fetch the address of the referenced value and one to fetch the

View File

@ -309,22 +309,6 @@ void Loc::dumpToStream(raw_ostream &os) const {
case loc::MemRegionKind:
os << '&' << cast<loc::MemRegionVal>(this)->getRegion()->getString();
break;
case loc::ObjCPropRefKind: {
const ObjCPropertyRefExpr *E = cast<loc::ObjCPropRef>(this)->getPropRefExpr();
os << "objc-prop{";
if (E->isSuperReceiver())
os << "super.";
else if (E->getBase())
os << "<base>.";
if (E->isImplicitProperty())
os << E->getImplicitPropertyGetter()->getSelector().getAsString();
else
os << E->getExplicitProperty()->getName();
os << "}";
break;
}
default:
llvm_unreachable("Pretty-printing not implemented for this Loc.");
}