On Oct 5, 2012, at 6:05 PM, Cary Coutant wrote:
>> There certainly is a fair amount of code in dwarf2read.c in gdb to handle
>> DW_AT_declaration and do things differently for declarations.
>>
>> Should I rework this patch to use that mechanism instead? If so, how? If
>> the class is marked only by prune_unused_types_mark visiting it as a parent,
>> but hasn't been marked by ??? that visits all its children, then emit it
>> with a DW_AT_declaration marking?
>
> One question I'd consider is what do you want to see in the debugger
> if this truly is the only debug info you have for the class? (For
> example, in the test case you added, a DW_AT_declaration attribute
> won't help if there's no full definition of the class anywhere else.)
> Is it reasonable to just show a truncated class definition in that
> case, or do you want the full definition available. My tentative
> answer would be that we do the pruning here because we expect there to
> be a full definition somewhere else, and that the lack of a
> DW_AT_declaration attribute is the bug.
>
> As you've discovered, however, it's not straightforward. You'll want
> to add the declaration attribute if you mark the DIE from below, but
> not from any reference where dokids is true. Alternatively, add the
> declaration attribute if any of its children are pruned. Perhaps that
> could be done in prune_unused_types_prune().
>
> If you're willing to rework the patch this way (assuming GDB does the
> right thing with it), I think that would be better. Thanks.
>
> -cary
I'll give it a try. I'll keep the existing patch in reserve in case we run out
of time before Phase 1 end -- it would be good to have some sort of fix for
this bug even if it's not the ideal one.
paul