aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@casey.cygnus.com>1999-11-25 02:33:31 +0000
committerJason Merrill <jason@gcc.gnu.org>1999-11-24 21:33:31 -0500
commit50e159f65532eb334dc2b12210acdc9ab0f334cf (patch)
treeeb375d133be007843883038588274884865a19eb /gcc
parent9a260e9924e983c75b69431c202c960e8671829b (diff)
downloadgcc-50e159f65532eb334dc2b12210acdc9ab0f334cf.zip
gcc-50e159f65532eb334dc2b12210acdc9ab0f334cf.tar.gz
gcc-50e159f65532eb334dc2b12210acdc9ab0f334cf.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/search.c29
2 files changed, 24 insertions, 12 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index f9ff037..f089e4f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+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>
* pt.c (tsubst_decl): Copy TREE_ASM_WRITTEN for VAR_DECLs.
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index 6ca8171..ec2594c 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);