On Fri, 2014-10-03 at 11:41 -0700, Cary Coutant wrote:
> > O. Then I was indeed wrong and defaulted does not impact ABI at all.
> > At least that is one worry less for the abi checkers :)
> 
> As Siva mentioned, it does in fact impact the ABI. A class with a
> non-trivial destructor is not a POD, and affects the calling
> convention, so the debugger needs to know the difference. C++ ABI
> reference here:
> 
>    http://mentorembedded.github.io/cxx-abi/abi.html#return-value
> 
> I've submitted a DWARF proposal to document the use of the
> DW_AT_artificial attribute on a default copy constructor or
> destructor.

Thanks for that reference. I was just stepping through gdb's
gdbarch_return_in_first_hidden_param_p to understand why Siva's example
did indeed seem to go wrong under GDB. That code is a little hairy with
all the arch specific indirections, so I am happy I can stop now :)

I can adjust my patch so that it does mark the declaration with
DW_AT_artificial if it is DECL_COPY_CONSTRUCTOR_P or DECL_DESTRUCTOR_P.
But maybe that is probably better done as a separate patch.

Or does it make sense to mark all defaulted special function members as
artificial instead of having a separate attribute for it? The (small)
advantage of having a separate attribute is that the consumer knows
whether it was explicitly defaulted.

Thanks,

Mark

Reply via email to