[cxx-abi-dev] Uncallable constructor variants

Jason Merrill jason at redhat.com
Fri Apr 1 15:33:44 UTC 2016


On 04/01/2016 10:47 AM, Nathan Sidwell wrote:
> On 04/01/16 10:36, Jason Merrill wrote:
>> On 04/01/2016 10:33 AM, Nathan Sidwell wrote:
>>> On 04/01/16 10:15, Jason Merrill wrote:
>>>> The base object constructor can never be called for a final class,
>>>> nor can the
>>>> complete object constructor for an abstract one.  Does anyone see an
>>>> ABI problem
>>>> with omitting these variants?
>>>
>>> Presumably the same applies to the corresponding destructors? (With any
>>> deleting-dtor behaving the same as the complete-dtor)
>>
>> Yes, except that virtual complete/deleting destructors always need to be
>> emitted, to satisfy vtable references.
>
> They could behave as pure virtual, and have the vtable reference
> __cxa_pure_virtual.  Though that would be an ABI change, in that the
> vtable emission might be in a different TU to the virtual destructor
> (non)-emitter.
>
> I suppose the destructors could simply be jumps to __cxa_pure_virtual,
> without perturbing the ABI.  If the destructors are emitted in the same
> TU as the vtable, an implementation would be free to reference
> __cxa_pure_virtual directly.

Right, the implementation just needs to define the symbol so as not to 
break existing references.

Jason



More information about the cxx-abi-dev mailing list