> 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