On Fri, Oct 3, 2014 at 7:17 AM, Jason Merrill <ja...@redhat.com> wrote: > On 10/03/2014 09:12 AM, Mark Wielaard wrote: >> >> A debugger not knowing whether a special member function was explicitly >> defaulted, implicitly declared or explicitly defined seems less confusion >> than not knowing whether it was deleted. But there are some subtle cases >> where knowing whether a constructor was user defined or explicitly >> defaulted do matter for whether the default constructor might have been >> implicitly generated. > > > Can you elaborate? > >> So like the deleted case this patch introduces >> a new attribute DW_AT_GNU_defaulted that gets attached to the function >> declaration. Note that since this is for declarations we explicitly >> test for DECL_DEFAULTED_IN_CLASS_P and ignore any implementation >> definitions that use = default; outside the class body. > > > Hmm, I'm dubious about this choice. How do you expect a consumer to use > this information?
I apologize for gate crashing here... Currently, there is no special attribute to indicate that a special member function is declared = default. So, if you have a class definition like this: class A { public: A () {} ~A () = default; int a; }; then, GDB sees the declaration of the destructor with no special attributes (like DW_AT_artificial or similar) and thinks that the copy constructor is user defined. Consequently, if there is a function defined as: A make_a (int i) { A a; a.a = i; return a; } Then, if a user invokes make_a at the GDB prompt, then GDB will wrongly pass the pointer to the return value as a hidden first parameter. Question: Should special member functions declared = default be marked DW_AT_artificial? Thanks, Siva Chandra