Previously, we expected Sema to make this ABI decision for us, resulting
in our emitting vtables in some cases where we didn't need them. With
this change, we emit vtables in precisely three cases:
- When we emit a reference to the vtable and it has suitable linkage.
- When we emit a key function definition.
- When we emit an explicit instantiation of a class.
This also removes the need to mark key functions as "must be emitted",
which means that an inline key function is no longer added to the list
of eagerly deserialized declarations in an AST file.
In exchange, we do now list explicit instantiation definitions of
dynamic classes as eagerly deserialized declarations. But they should
be much rarer in header files!
Does it matter if it's not this particular declaration that's the explicit instantiation?