From 50e159f65532eb334dc2b12210acdc9ab0f334cf Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 25 Nov 1999 02:33:31 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/search.c | 29 +++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f9ff0372ce6..f089e4fffe8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +1999-11-24 Jason Merrill + + * 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 * pt.c (tsubst_decl): Copy TREE_ASM_WRITTEN for VAR_DECLs. diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 6ca817164c8..ec2594c8a94 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -2912,19 +2912,28 @@ get_vbase_types (type) /* Debug info for C++ classes can get very large; try to avoid emitting it everywhere. - As it happens, this optimization wins even when the target supports - BINCL (though only slightly), so we always do it. */ + Note that this optimization wins even when the target supports + BINCL (if only slightly), and reduces the amount of work for the + linker. */ void maybe_suppress_debug_info (t) tree t; { - /* We don't bother with this for dwarf1, which shouldn't be used for C++ - anyway. */ - if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG - || write_symbols == NO_DEBUG) + /* We can't do the usual TYPE_DECL_SUPPRESS_DEBUG thing with DWARF, which + does not support name references between translation units. It supports + symbolic references between translation units, but only within a single + 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; + /* 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 the same way. */ if (CLASSTYPE_INTERFACE_ONLY (t)) @@ -2962,12 +2971,8 @@ note_debug_info_needed (type) /* We can't go looking for the base types and fields just yet. */ return; - /* We can't do the TYPE_DECL_SUPPRESS_DEBUG thing with DWARF, which - does not support name references between translation units. It supports - 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) + /* See the comment in maybe_suppress_debug_info. */ + if (write_symbols == DWARF_DEBUG || write_symbols == NO_DEBUG) return; dfs_walk (TYPE_BINFO (type), dfs_debug_mark, dfs_debug_unmarkedp, 0); -- 2.30.2