aboutsummaryrefslogtreecommitdiff
path: root/gcc/dbxout.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@codesourcery.com>2006-07-24 02:59:36 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2006-07-24 02:59:36 +0000
commitf629051ee63712268222c000e3485ceb67a4e16a (patch)
tree3fe2117f7a22ae18db0f6ad5e0a14a073549be6d /gcc/dbxout.c
parent74b0d490fa7577857b036b8bff7e8a7cfe7d20a8 (diff)
downloadgcc-f629051ee63712268222c000e3485ceb67a4e16a.zip
gcc-f629051ee63712268222c000e3485ceb67a4e16a.tar.gz
gcc-f629051ee63712268222c000e3485ceb67a4e16a.tar.bz2
re PR debug/27473 (g++.dg/other/unused1.C and gcc.dg/20060410.c fail on powerpc-darwin)
PR debug/27473 * dbxout.c (output_used_types_helper, output_used_types): New. (dbxout_symbol): Call output_used_types. From-SVN: r115704
Diffstat (limited to 'gcc/dbxout.c')
-rw-r--r--gcc/dbxout.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index 49a3242..0776ad8 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -2369,6 +2369,38 @@ dbxout_expand_expr (tree expr)
}
}
+/* Helper function for output_used_types. Queue one entry from the
+ used types hash to be output. */
+
+static int
+output_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
+{
+ tree type = *slot;
+
+ if ((TREE_CODE (type) == RECORD_TYPE
+ || TREE_CODE (type) == UNION_TYPE
+ || TREE_CODE (type) == QUAL_UNION_TYPE
+ || TREE_CODE (type) == ENUMERAL_TYPE)
+ && TYPE_STUB_DECL (type)
+ && DECL_P (TYPE_STUB_DECL (type))
+ && ! DECL_IGNORED_P (TYPE_STUB_DECL (type)))
+ debug_queue_symbol (TYPE_STUB_DECL (type));
+ else if (TYPE_NAME (type)
+ && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
+ debug_queue_symbol (TYPE_NAME (type));
+
+ return 1;
+}
+
+/* Force all types used by this function to be output in debug
+ information. */
+static void
+output_used_types (void)
+{
+ if (cfun && cfun->used_types_hash)
+ htab_traverse (cfun->used_types_hash, output_used_types_helper, NULL);
+}
+
/* Output a .stabs for the symbol defined by DECL,
which must be a ..._DECL node in the normal namespace.
It may be a CONST_DECL, a FUNCTION_DECL, a PARM_DECL or a VAR_DECL.
@@ -2482,6 +2514,9 @@ dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
|| GET_CODE (XEXP (decl_rtl, 0)) != SYMBOL_REF)
break;
+ if (flag_debug_only_used_symbols)
+ output_used_types ();
+
dbxout_begin_complex_stabs ();
stabstr_I (DECL_ASSEMBLER_NAME (decl));
stabstr_S (TREE_PUBLIC (decl) ? ":F" : ":f");