<div dir="ltr">On 13 February 2013 10:53, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com" target="_blank">rjmccall@apple.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On Feb 13, 2013, at 12:53 AM, Nick Lewycky <<a href="mailto:nlewycky@google.com">nlewycky@google.com</a>> wrote:<br>
> Thinking about this issue more, I'd like to retract this patch. Consider the case where we're implementing the rule that all ODR-used inline functions must have a definition. If Derived::fn is marked inline, we'll see a fictitious use of it and reject a valid translation unit.<br>


><br>
> My next plan is to remove this code from Sema entirely and do the equivalent work inside codegen proper. No reason it can't keep track of probable virtual function targets when writing out a virtual dispatch.<br>


<br>
</div>Ugh.  I am not thrilled by the idea of emitting massive amounts of code because something *might* devirtualize to it.<br>
<br>
Also, this potentially requires template instantiation.<br></blockquote><div><br></div><div style>Me neither. However, Sema and CodeGen are already colluding to do this. See SemaExpr.cpp:11168 (MarkExprReferenced), which may trigger instantiation, and CGExprCXX.cpp:200 (EmitCXXMemberCallExpr) which assumes the potential callee was already instantiated.</div>

<div style><br></div><div style>Nick</div><div style><br></div></div></div></div>