<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jul 26, 2012, at 9:37 AM, Jordan Rose wrote:</div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jul 26, 2012, at 9:29 , jahanian <<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>> wrote:</div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><blockquote type="cite">-    for (Decl::redecl_iterator I = MD->redecls_begin(), E = MD->redecls_end();<br>-         I != E; ++I) {<br>-      if (cast<ObjCMethodDecl>(*I)->isThisDeclarationADefinition())<br>-        return *I;<br>+    const ObjCMessageExpr *E = getOriginExpr();<br></blockquote><div><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">getOriginExpr may return null. You should check for that.</div></div></div></div></blockquote><div><br></div><div>Right now it's safe to assume all ObjCMethodCalls have origin expressions, because all our implicit message sends are already abstracted using PseudoObjectExpr. I guess that may change in the future.</div></div></div></blockquote><br></div><div>The only implicit message sends that aren't directly represented in the AST these days are:</div><div>  (1) the implicit [super dealloc] in an ARC dealloc method, because it has destructor-like semantics, i.e. it needs to be run even on early exits from the function;</div><div>  (2) the message sends implementing literals, because we don't actually guarantee that they'll always be message sends — if we decide it's worthwhile to implement them as runtime calls, we will;</div><div>  (3) the message sends implementing the ObjC "fast enumeration" loop.</div><div><br></div><div>I don't know if the static analyzer models the message sends for fast enumeration.</div><div><br></div><div>It's unlikely that we will ever add new user visible message sends ("user visible" in the sense that the sends for literals aren't) to arbitrarily-typed methods;  that's exactly the sort of thing that we wanted to get away from when we introduced PseudoObjectExpr.  It's possible that we might add new things like the fast enumeration loop, where the selectors are checked against specific signatures.</div><div><br></div><div>John.</div><br></body></html>