]> 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:26:41 +0000 (19:26 +0000)
committerDodji Seketeli <dodji@gcc.gnu.org>
Mon, 18 May 2009 19:26:41 +0000 (21:26 +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: r147676

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

index d1023425ce3ff098e5175ff2df9124a807ed4ed6..94d573d82f3705269cba9ddd6b75b932ab6701d3 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-16  Richard Earnshaw  <rearnsha@arm.com>
 
        PR target/40153
index f34910aff1f06f6ed1c911c05e4aa15d76d93bbe..63d93a24b0138d24d8d3677c9bf4120b275fbdcb 100644 (file)
@@ -13524,6 +13524,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), context_die);
       return;
index 8b7b5383128597dbc18cd033df445c32c2007363..e8da9b3c7b4efdd68d7f35d0622fd96fc6d491b5 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.
+