diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 973588267b0..6b82ac7257d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-05-18 Dodji Seketeli + + 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 * config/mips/mips.md (*zero_extend_trunc, diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 157bdaf9574..cb1b988906a 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1645ea4befd..1e1c805fa21 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-18 Dodji Seketeli + + PR debug/40109 + * g++.dg/debug/dwarf2/nested-1.C: New test. + 2009-05-18 H.J. Lu 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 index 00000000000..336582c112a --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C @@ -0,0 +1,29 @@ +// Contributed by Dodji Seketeli +// 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. +