Commit 50e159f6 by Jason Merrill Committed by Jason Merrill

search.c (note_debug_info_needed): Do perform this optimization for dwarf2.

        * search.c (note_debug_info_needed): Do perform this optimization
        for dwarf2.
        (maybe_suppress_debug_info): Likewise.  Start by clearing
        TYPE_DECL_SUPPRESS_DEBUG.

From-SVN: r30658
parent 9a260e99
1999-11-24 Jason Merrill <jason@casey.cygnus.com>
* search.c (note_debug_info_needed): Do perform this optimization
for dwarf2.
(maybe_suppress_debug_info): Likewise. Start by clearing
TYPE_DECL_SUPPRESS_DEBUG.
1999-11-24 Mark Mitchell <mark@codesourcery.com> 1999-11-24 Mark Mitchell <mark@codesourcery.com>
* pt.c (tsubst_decl): Copy TREE_ASM_WRITTEN for VAR_DECLs. * pt.c (tsubst_decl): Copy TREE_ASM_WRITTEN for VAR_DECLs.
......
...@@ -2912,19 +2912,28 @@ get_vbase_types (type) ...@@ -2912,19 +2912,28 @@ get_vbase_types (type)
/* Debug info for C++ classes can get very large; try to avoid /* Debug info for C++ classes can get very large; try to avoid
emitting it everywhere. emitting it everywhere.
As it happens, this optimization wins even when the target supports Note that this optimization wins even when the target supports
BINCL (though only slightly), so we always do it. */ BINCL (if only slightly), and reduces the amount of work for the
linker. */
void void
maybe_suppress_debug_info (t) maybe_suppress_debug_info (t)
tree t; tree t;
{ {
/* We don't bother with this for dwarf1, which shouldn't be used for C++ /* We can't do the usual TYPE_DECL_SUPPRESS_DEBUG thing with DWARF, which
anyway. */ does not support name references between translation units. It supports
if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG symbolic references between translation units, but only within a single
|| write_symbols == NO_DEBUG) executable or shared library.
For DWARF 2, we handle TYPE_DECL_SUPPRESS_DEBUG by pretending
that the type was never defined, so we only get the members we
actually define. */
if (write_symbols == DWARF_DEBUG || write_symbols == NO_DEBUG)
return; return;
/* We might have set this earlier in cp_finish_decl. */
TYPE_DECL_SUPPRESS_DEBUG (TYPE_MAIN_DECL (t)) = 0;
/* If we already know how we're handling this class, handle debug info /* If we already know how we're handling this class, handle debug info
the same way. */ the same way. */
if (CLASSTYPE_INTERFACE_ONLY (t)) if (CLASSTYPE_INTERFACE_ONLY (t))
...@@ -2962,12 +2971,8 @@ note_debug_info_needed (type) ...@@ -2962,12 +2971,8 @@ note_debug_info_needed (type)
/* We can't go looking for the base types and fields just yet. */ /* We can't go looking for the base types and fields just yet. */
return; return;
/* We can't do the TYPE_DECL_SUPPRESS_DEBUG thing with DWARF, which /* See the comment in maybe_suppress_debug_info. */
does not support name references between translation units. It supports if (write_symbols == DWARF_DEBUG || write_symbols == NO_DEBUG)
symbolic references between translation units, but only within a single
executable or shared library. */
if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG
|| write_symbols == NO_DEBUG)
return; return;
dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0); dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment