aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/dwarf2out.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C30
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 11dc539..95800ce 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-08-27 Dodji Seketeli <dodji@redhat.com>
+
+ PR debug/41770
+ * dwarf2out.c (get_context_die): Declare this static function.
+ (gen_type_die_with_usage): Make sure a DIE is a generated for
+ the context of a typedef.
+
2009-08-26 Anatoly Sokolov <aesok@post.ru>
* doc/invoke.texi (AVR Options): Remove documentation of -minit-stack
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 2ee1df8..ad956f8 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5887,6 +5887,7 @@ static void gen_type_die (tree, dw_die_ref);
static void gen_block_die (tree, dw_die_ref, int);
static void decls_for_scope (tree, dw_die_ref, int);
static int is_redundant_typedef (const_tree);
+static inline dw_die_ref get_context_die (tree);
static void gen_namespace_die (tree, dw_die_ref);
static void gen_decl_die (tree, tree, dw_die_ref);
static dw_die_ref force_decl_die (tree);
@@ -15436,7 +15437,7 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
the type description DIE we want to generate. */
if (DECL_CONTEXT (TYPE_NAME (type))
&& TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
- context_die = lookup_decl_die (DECL_CONTEXT (TYPE_NAME (type)));
+ context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
TREE_ASM_WRITTEN (type) = 1;
gen_decl_die (TYPE_NAME (type), NULL, context_die);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e4a60c9..8448541 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-08-27 Dodji Seketeli <dodji@redhat.com>
+
+ PR debug/41770
+ * debug/dwarf2/namespace-1.C: New test.
+
2009-08-26 H.J. Lu <hongjiu.lu@intel.com>
PR fortran/41162
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C
new file mode 100644
index 0000000..aad89ba5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C
@@ -0,0 +1,30 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR debug/41170
+// { dg-options "-g -dA" }
+//
+// We want to test that there is a DW_TAG_namespace DIE DW_AT_name is set
+// to "not_emitted". That namespace die has a child DW_TAG_typedef DIE
+// which DW_AT_name is the null terminated string "T".
+// { dg-final { scan-assembler-times "DIE +\\(.*?\\) DW_TAG_namespace" 1 } }
+// { dg-final { scan-assembler-times "DW_AT_name: \"not_emitted\"" 1 } }
+// { dg-final { scan-assembler-times "DIE +\\(.*?\\) DW_TAG_typedef" 1 } }
+// { dg-final { scan-assembler-times "\.ascii \"T.0\"\[\t \]+# DW_AT_name" 1 } }
+
+struct strukt
+{
+ int m;
+};
+
+namespace not_emitted
+{
+ typedef strukt T;
+}
+
+int
+main()
+{
+ not_emitted::T t;
+ t.m = 0;
+ return 0;
+}
+