From 82725547db6fba598916a16b027e06d16c5e6a57 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Mon, 18 May 2009 19:19:52 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2out.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C | 29 ++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/nested-1.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9735882..6b82ac7 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 157bdaf..cb1b988 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 1645ea4..1e1c805 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 0000000..336582c --- /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. + -- 2.7.4