<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Nov 12, 2009, at 11:27 AM, Duncan Sands wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Bill,<br><br><blockquote type="cite"><blockquote type="cite">doesn't this mean that if a pointer to a nounwind function is passed as a<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">call parameter (rather than as the callee), then DoesNotThrow is set to true?<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">If such an instruction existed, then I suppose. What's the best way to determine that it's the "callee" and not a parameter? Do you have an example to work with?<br></blockquote><br>I actually think the approach is wrong.</div></blockquote><div><br></div><div>I'm not surprised. :)</div><br><blockquote type="cite"><div>A call can be "nounwind" without the<br>callee necessarily being nounwind.  Your patch only catches the case of the<br>callee being nounwind.  The CallSite doesNotThrow method checks for both of<br>these possibilities.  I think what should happen is: at the moment of lowering<br>the IR to SDAG nodes, check "doesNotThrow" on calls and set a corresponding<br>flag in the SDAG node.  Check this flag when outputting the dwarf table.<font class="Apple-style-span" color="#000000"><font class="Apple-style-span" color="#144FAE"><br></font></font></div></blockquote><br></div><div>Possible. Though at the point of DWARF generation, we don't have the SDAG nodes anymore. So it would have to be propagated to the CALL instruction.</div><div><br></div><div>-bw</div><div><br></div></body></html>