]> granicus.if.org Git - clang/commitdiff
[analyzer] More reliably detect property accessors.
authorAnna Zaks <ganna@apple.com>
Tue, 17 Sep 2013 01:30:57 +0000 (01:30 +0000)
committerAnna Zaks <ganna@apple.com>
Tue, 17 Sep 2013 01:30:57 +0000 (01:30 +0000)
This has a side effect of preventing a crash, which occurs because we get a
property getter declaration, which is overriding but is declared inside
@protocol. Will file a bug about this inconsistency internally. Getting a
small test case is very challenging.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190836 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/CallEvent.cpp

index 59cdfbb7f9e30819105319d9af088f0a251025e6..4f8683f78538573779272bcbc3437d9d27572e77 100644 (file)
@@ -685,8 +685,14 @@ const PseudoObjectExpr *ObjCMethodCall::getContainingPseudoObjectExpr() const {
 
 ObjCMessageKind ObjCMethodCall::getMessageKind() const {
   if (Data == 0) {
+
+    // Find the parent, ignoring implicit casts.
     ParentMap &PM = getLocationContext()->getParentMap();
     const Stmt *S = PM.getParent(getOriginExpr());
+    while (isa<ImplicitCastExpr>(S))
+      S = PM.getParent(S);
+
+    // Check if parent is a PseudoObjectExpr.
     if (const PseudoObjectExpr *POE = dyn_cast_or_null<PseudoObjectExpr>(S)) {
       const Expr *Syntactic = POE->getSyntacticForm();