summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-04-11 22:22:05 +0000
committerTed Kremenek <kremenek@apple.com>2011-04-11 22:22:05 +0000
commit8ef59e5c03c937056cd0282fe9747be2978a973e (patch)
treeb9f9cf1866a36f33f7a9bb0a42d935582b4c4d2a /clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp
parent0f85789800846dc3beeab75bd7e8d3af0f26a362 (diff)
downloadbcm5719-llvm-8ef59e5c03c937056cd0282fe9747be2978a973e.tar.gz
bcm5719-llvm-8ef59e5c03c937056cd0282fe9747be2978a973e.zip
C++ static analysis: also invalidate fields of objects that are the callees in C++ method calls.
llvm-svn: 129308
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp b/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp
index c44d36ae49f..c005819c9c9 100644
--- a/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ObjCMessage.cpp
@@ -111,7 +111,7 @@ const Expr *ObjCMessage::getArgExpr(unsigned i) const {
QualType CallOrObjCMessage::getResultType(ASTContext &ctx) const {
QualType resultTy;
bool isLVal = false;
-
+
if (CallE) {
isLVal = CallE->isLValue();
const Expr *Callee = CallE->getCallee();
@@ -140,3 +140,10 @@ SVal CallOrObjCMessage::getArgSValAsScalarOrLoc(unsigned i) const {
return Msg.getArgSVal(i, State);
return UnknownVal();
}
+
+SVal CallOrObjCMessage::getCXXCallee() const {
+ assert(isCXXCall());
+ const Expr *callee =
+ cast<CXXMemberCallExpr>(CallE)->getImplicitObjectArgument();
+ return State->getSVal(callee);
+}
OpenPOWER on IntegriCloud