re PR debug/40109 (Incorrect debug info nesting for typedef statements within namespaces)

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
This commit is contained in:
Dodji Seketeli 2009-05-18 19:19:52 +00:00 committed by Dodji Seketeli
parent f6a1e4301a
commit 82725547db
4 changed files with 46 additions and 0 deletions

View 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>,

View 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;

View 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

View File

@ -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.