[PATCH] [ms-cxxabi] Destroy temporary record arguments in the callee
Richard Smith
richard at metafoo.co.uk
Mon Jun 10 13:55:29 PDT 2013
On Mon, Jun 10, 2013 at 12:58 PM, Reid Kleckner <rnk at google.com> wrote:
> On Mon, Jun 10, 2013 at 1:29 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
>>
>>
>> You're likely to need a Sema change to ensure that a destructor for the
>> parameter type is implicitly declared (if needed) in the TU containing the
>> caller (otherwise IR generation will probably crash or assert when trying to
>> emit a call to it).
>
>
> I think I solved this with a forthcoming patch.
>
>>
>> You'll presumably also need either a Sema change or a CodeGen change to
>> ensure that a definition of the destructor ends up in the program -- either
>> mark the dtor as used in the TU containing the callee (which is likely to
>> match MSVC but is non-conforming), or demote it from linkonce_odr to
>> weak_odr in the TU containing the call (which is conforming but may hinder
>> inlining etc).
>
>
> What's wrong with marking the dtor as used? You need a full class
> definition to take a class by value, right?
For a destructor in a class template, there may be no point of
instantiation for that destructor in the TU containing the function
definition. I don't think we really need to care about this too much,
though, since this problem will exist regardless for code like:
struct A { ~A(); };
void f(A) {}
... which will need a definition of ~A whether or not this function is
ever called.
More information about the cfe-commits
mailing list