summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-07-02 21:41:53 +0000
committerJordan Rose <jordan_rose@apple.com>2012-07-02 21:41:53 +0000
commit62146f67b76bd8e704149cc0b34f96da1dcfe384 (patch)
treeb522b7ffa6843ce85ba59648e80633d7c086ed16 /clang
parent3bf1d5d1de6a2e99856b0e7fc7267f224844bdde (diff)
downloadbcm5719-llvm-62146f67b76bd8e704149cc0b34f96da1dcfe384.tar.gz
bcm5719-llvm-62146f67b76bd8e704149cc0b34f96da1dcfe384.zip
Revert "Remove unused member (& consequently unused parameter) in SA's Call code."
...and instead add an accessor. We're not using this today, but it's something that should probably stay in the source for potential clients, and it doesn't cost a lot. (ObjCPropertyAccess is only created on the stack, and right now there's only ever one alive at a time.) This reverts r159581 / commit 8e674e1da34a131faa7d43dc3fcbd6e49120edbe. llvm-svn: 159595
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h15
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngine.cpp5
2 files changed, 14 insertions, 6 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
index 86001baffeb..f5d6309884b 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Calls.h
@@ -405,13 +405,16 @@ public:
///
/// Example: obj.prop += 1;
class ObjCPropertyAccess : public ObjCMethodCall {
+ const ObjCPropertyRefExpr *PropE;
SourceRange EntireRange;
public:
- ObjCPropertyAccess(SourceRange range, const ObjCMessageExpr *Msg,
- const ProgramStateRef St, const LocationContext *LCtx)
- : ObjCMethodCall(Msg, St, LCtx, CE_ObjCPropertyAccess), EntireRange(range)
- {}
+ ObjCPropertyAccess(const ObjCPropertyRefExpr *pe, SourceRange range,
+ const ObjCMessageExpr *Msg, const ProgramStateRef St,
+ const LocationContext *LCtx)
+ : ObjCMethodCall(Msg, St, LCtx, CE_ObjCPropertyAccess), PropE(pe),
+ EntireRange(range)
+ {}
/// \brief Returns true if this property access is calling the setter method.
bool isSetter() const {
@@ -422,6 +425,10 @@ public:
return EntireRange;
}
+ const ObjCPropertyRefExpr *getPropertyExpr() const {
+ return PropE;
+ }
+
static bool classof(const CallEvent *CA) {
return CA->getKind() == CE_ObjCPropertyAccess;
}
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index ae38a12160c..63aa28fa0aa 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -881,8 +881,9 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(syntactic))
syntactic = BO->getLHS();
- if (isa<ObjCPropertyRefExpr>(syntactic)) {
- VisitObjCMessage(ObjCPropertyAccess(PO->getSourceRange(), ME,
+ if (const ObjCPropertyRefExpr *PR =
+ dyn_cast<ObjCPropertyRefExpr>(syntactic)) {
+ VisitObjCMessage(ObjCPropertyAccess(PR, PO->getSourceRange(), ME,
Pred->getState(), LCtx),
Pred, Dst);
evaluated = true;
OpenPOWER on IntegriCloud