From de940da033aa46c50c7d07c61f455e7c5053e90a Mon Sep 17 00:00:00 2001 From: Anna Zaks Date: Tue, 17 Sep 2013 01:30:57 +0000 Subject: [PATCH] [analyzer] More reliably detect property accessors. 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 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/StaticAnalyzer/Core/CallEvent.cpp b/lib/StaticAnalyzer/Core/CallEvent.cpp index 59cdfbb7f9..4f8683f785 100644 --- a/lib/StaticAnalyzer/Core/CallEvent.cpp +++ b/lib/StaticAnalyzer/Core/CallEvent.cpp @@ -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(S)) + S = PM.getParent(S); + + // Check if parent is a PseudoObjectExpr. if (const PseudoObjectExpr *POE = dyn_cast_or_null(S)) { const Expr *Syntactic = POE->getSyntacticForm(); -- 2.40.0