[cfe-dev] Could we emit inline virtual member functions as available_externally when there's a key function (same as vtable and debug info)?

John McCall via cfe-dev cfe-dev at lists.llvm.org
Fri Jun 3 19:05:57 PDT 2016


> On Jun 3, 2016, at 8:43 AM, David Blaikie via cfe-dev <cfe-dev at lists.llvm.org> wrote:
> I assume there's a good reason we don't do this - but I can't quite figure it out off the top of my head.
> 
> Any thoughts?

The translation unit that emits the key function is required to emit the v-table symbol with as a strong definition with the type's visibility.  It is not required to emit visible symbols for any of the inline virtual functions.  It is, of course, required to emit those functions as part of emitting the v-table; but it doesn't have to provide symbols for them at all, because even if it were possible to take the address of a virtual member function in a comparable way, there is no way to take that address *via the v-table* and so the v-table's reference may be to its own implementation.  This is good because it allows virtual methods to be given hidden visibility by default; it also permits v-tables to contain specialized method implementations, e.g. methods that use a known most-derived class.

John.


More information about the cfe-dev mailing list