[patch] Trying to fix pr13124

Eli Friedman eli.friedman at gmail.com
Wed Aug 28 15:14:52 PDT 2013


On Tue, Aug 27, 2013 at 5:35 AM, Rafael EspĂ­ndola <
rafael.espindola at gmail.com> wrote:

> ccing cfe-commits
>
> On 26 August 2013 21:44, Rafael EspĂ­ndola <rafael.espindola at gmail.com>
> wrote:
> > I finally got back to pr13124.
> >
> > Last time it was discussed
> > (http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-June/022606.html)
> > John was in favor of emitting a copy of the function when emitting the
> > available_externally vtable. The folks working on the equivalent gcc
> > bug (gcc.gnu.org/pr53808) agree, so I started trying to implement this
> > in clang.
> >
> > The first issue I hit is that if codegen is going to output a
> > function, sema has to mark it used. Given llvm.org/pr9114, it looks
> > like sema cannot be more aggressive at marking functions used because
> > of vtables.
> >
> > This leaves us with a few unpleasant options:
> >
> > * Marking functions in vtables used if possible. This sounds a bit
> > sloppy, so I would like to avoid it.
> > * Producing available_externally vtables only when all the functions
> > in it are already used or weak_odr. This would cover cases like
> >
> > --------------------
> > struct foo {
> >   virtual ~foo();
> > };
> > struct bar : public foo {
> >   virtual void zed();
> > };
> > void f() {
> >   foo *x(new bar);
> >   delete x;
> > }
> > void g(bar *x) {
> >   x->~bar(); // force the destructor to be used
> > }
> > --------------------------
> >
> > and
> >
> > ----------------------------------
> > template<typename T>
> > struct bar {
> >   virtual ~bar();
> > };
> > template<typename T>
> > bar<T>::~bar() {
> > }
> > extern template class bar<int>; // make the destructor weak_odr
> > instead of linkonce_odr
> > void f() {
> >   bar<int> *x(new bar<int>);
> >   delete x;
> > }
> > ----------------------------
> >
> > These look like corner cases, so it is unclear if it is worth it.
> >
> > * And finally: Just nuke this optimization. That is what this patch
> implements.
>
> This assessment appears accurate.

-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130828/a02840bc/attachment.html>


More information about the cfe-commits mailing list