]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/40109 (Incorrect debug info nesting for typedef statements within namespaces)
authorDodji Seketeli <dodji@redhat.com>
Mon, 18 May 2009 19:19:52 +0000 (19:19 +0000)
committerDodji Seketeli <dodji@gcc.gnu.org>
Mon, 18 May 2009 19:19:52 +0000 (21:19 +0200)
Fix for PR debug/40109

gcc/ChangeLog:
PR debug/40109
* dwarf2out.c (gen_type_die_with_usage): Generate the DIE as a
child of the containing namespace's DIE.

gcc/testsuite/ChangeLog:
PR debug/40109
* g++.dg/debug/dwarf2/nested-1.C: New test.

From-SVN: r147674

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C [new file with mode: 0644]

index 973588267b0c6c14ab58c85331b63f1196a3db43..6b82ac7257d871b2e72414890e4cd0634d37d331 100644 (file)
@@ -1,3 +1,9 @@
+2009-05-18  Dodji Seketeli  <dodji@redhat.com>
+
+       PR debug/40109
+       * dwarf2out.c (gen_type_die_with_usage): Generate the DIE as a
+       child of the containing namespace's DIE.
+
 2009-05-18  Adam Nemet  <anemet@caviumnetworks.com>
 
        * config/mips/mips.md (*zero_extend<GPR:mode>_trunc<SHORT:mode>,
index 157bdaf9574d53697a02034e45637f9dbfe61060..cb1b988906a06e7df20a7c480f49ec58a5ce961a 100644 (file)
@@ -14642,6 +14642,12 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
       /* Prevent broken recursion; we can't hand off to the same type.  */
       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
 
+      /* Use the DIE of the containing namespace as the parent DIE of
+         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)));
+
       TREE_ASM_WRITTEN (type) = 1;
       gen_decl_die (TYPE_NAME (type), NULL, context_die);
       return;
index 1645ea4befd96ff9bdbcf6b907b69aa50a640ba8..1e1c805fa2161d31ae33a3760b75fe1ed2d5f2e1 100644 (file)
@@ -1,3 +1,8 @@
+2009-05-18  Dodji Seketeli  <dodji@redhat.com>
+
+       PR debug/40109
+       * g++.dg/debug/dwarf2/nested-1.C: New test.
+
 2009-05-18  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR testsuite/39907
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C
new file mode 100644 (file)
index 0000000..336582c
--- /dev/null
@@ -0,0 +1,29 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR debug/40109
+// { dg-do compile }
+// { dg-options  "-g -dA -O0" }
+
+namespace A
+{
+
+  class B
+  {
+  };
+  typedef A::B AB;
+};
+
+int
+main()
+{
+  A::AB ab;
+  return 0;
+}
+
+// { dg-final { scan-assembler "DW_TAG_typedef" } }
+//
+// What we want to do here is to be sure that the DIE of A::AB is generated
+// as a child of the DIE of the namespace A declaration.
+// So this test won't catch a regression on this fix yet. To write a proper
+// test for this fix, we would need a dwarf reader written in tcl,
+// or something along those lines.
+