<div class="gmail_quote">On Fri, Jul 13, 2012 at 7:02 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



The testcase you added to virt-template-vtable.cpp is already passing<br>
without your patch, anything wrong?</blockquote><div><br></div><div>Thanks for catching that, I meant to revert that file. That test is an (incorrect) precursor to the bug reduction which ended up in virtual-member-functions.cpp.</div>


<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Same goes for the test in<br>

virtual-member-functions.cpp<br></blockquote><div><br></div><div>That one fails for me without the patch:</div><div><br></div><div><div>error: 'error' diagnostics seen but not expected: </div><div>  Line 90: implicit instantiation of undefined member 'LazilyInstantiate::A<int>::Impl'</div>



<div>error: 'note' diagnostics seen but not expected: </div><div>  Line 96: in instantiation of member function 'LazilyInstantiate::scoped_ptr<LazilyInstantiate::A<int>::Impl>::~scoped_ptr' requested here</div>



<div>  Line 107: in instantiation of member function 'LazilyInstantiate::A<int>::~A' requested here</div><div>  Line 94: member is declared here</div><div>4 errors generated.</div></div><div><br></div><div>


We instantiate A<int>::F because it's used in C's vtable, which is used in C's constructor, and that leads to us instantiate A<int>'s vtable, which leads to us instantiate A<int>'s destructor, which fails. This test started failing as a result of r159895; prior to that, we weren't instantiating A<int>::F when building C's vtable. Is it possible you don't have that revision?</div>


<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>On 11 July 2012 03:53, Richard Smith <<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>> wrote:<br>
> Hi,<br>
><br>
> Currently, Clang marks a class's vtable as used (and thus marks as used and,<br>
> potentially, instantiates everything within it) whenever any virtual<br>
> function in the class is referenced. This seems excessive; is there a reason<br>
> why we'd always want the vtable in such circumstances? (Attached is a patch<br>
> to remove this behavior, which works fine in my -- fairly limited, so far --<br>
> testing).<br>
><br>
> Thanks,<br>
> Richard<br>
><br>
</div></div>> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
</blockquote></div><br>