On January 30, 2015 11:04:23 PM CET, Jason Merrill <ja...@redhat.com> wrote: >On 01/30/2015 03:36 PM, Aldy Hernandez wrote: >> /* It is possible to have both DECL_ABSTRACT_P and DECLARATION be >true if we >> started to generate the abstract instance of an inline, decided >to output >> its containing class, and proceeded to emit the declaration of >the inline >> from the member list for the class. If so, DECLARATION takes >priority; >> we'll get back to the abstract instance when done with the >class. */ > >This comment is out of date; in this case decl_ultimate_origin will >return NULL_TREE, so origin is null, so we shouldn't need to deal with >this here. > >> + /* ?? We must not reset `origin', so C++ clones get a proper >> + DW_AT_abstract_origin tagged DIE further on. */ >> +#if 0 >> /* The class-scope declaration DIE must be the primary DIE. */ >> if (origin && declaration && class_or_namespace_scope_p >(context_die)) >> { >> origin = NULL; >> gcc_assert (!old_die); >> } >> +#endif > >So I think this block is unnecessary. > >> Obviously, now we will get more DIEs than before (complete >constructors, base constructors, and what have yous). Whereas >previously we only generated a DIE for the used ones. > >Hmm, that's unfortunate. > >What if we leave the clone skipping alone here and emit early debug >about all reachable functions in >symbol_table::finalize_compilation_unit, between analyze_functions() >and >compile()?
I always thought a user expects debug information for all entities in the source, not only those useb by the (optimized) binary. Richard. >Jason