From: Dodji Seketeli Date: Thu, 27 Aug 2009 07:05:24 +0000 (+0000) Subject: re PR debug/41170 (namespace DIE not generated when it contains only a typedef) X-Git-Tag: releases/gcc-4.5.0~3824 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7842a9dbf8c304c7531d3e390ed320294934c0bc;p=thirdparty%2Fgcc.git re PR debug/41170 (namespace DIE not generated when it contains only a typedef) Fix for PR debug/41170 gcc/ChangeLog: PR debug/41770 * dwarf2out.c (get_context_die): Declare this static function. (gen_type_die_with_usage): Make sure a DIE is a generated for the context of a typedef. gcc/testsuite/ChangeLog: PR debug/41770 * debug/dwarf2/namespace-1.C: New test. From-SVN: r151138 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 11dc539dcba7..95800ceddcda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-08-27 Dodji Seketeli + + PR debug/41770 + * dwarf2out.c (get_context_die): Declare this static function. + (gen_type_die_with_usage): Make sure a DIE is a generated for + the context of a typedef. + 2009-08-26 Anatoly Sokolov * doc/invoke.texi (AVR Options): Remove documentation of -minit-stack diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 2ee1df80ca0d..ad956f83324b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5887,6 +5887,7 @@ static void gen_type_die (tree, dw_die_ref); static void gen_block_die (tree, dw_die_ref, int); static void decls_for_scope (tree, dw_die_ref, int); static int is_redundant_typedef (const_tree); +static inline dw_die_ref get_context_die (tree); static void gen_namespace_die (tree, dw_die_ref); static void gen_decl_die (tree, tree, dw_die_ref); static dw_die_ref force_decl_die (tree); @@ -15436,7 +15437,7 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die, 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))); + context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type))); TREE_ASM_WRITTEN (type) = 1; gen_decl_die (TYPE_NAME (type), NULL, context_die); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e4a60c936bd2..8448541c76bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-08-27 Dodji Seketeli + + PR debug/41770 + * debug/dwarf2/namespace-1.C: New test. + 2009-08-26 H.J. Lu PR fortran/41162 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C new file mode 100644 index 000000000000..aad89ba5c303 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C @@ -0,0 +1,30 @@ +// Contributed by Dodji Seketeli +// Origin PR debug/41170 +// { dg-options "-g -dA" } +// +// We want to test that there is a DW_TAG_namespace DIE DW_AT_name is set +// to "not_emitted". That namespace die has a child DW_TAG_typedef DIE +// which DW_AT_name is the null terminated string "T". +// { dg-final { scan-assembler-times "DIE +\\(.*?\\) DW_TAG_namespace" 1 } } +// { dg-final { scan-assembler-times "DW_AT_name: \"not_emitted\"" 1 } } +// { dg-final { scan-assembler-times "DIE +\\(.*?\\) DW_TAG_typedef" 1 } } +// { dg-final { scan-assembler-times "\.ascii \"T.0\"\[\t \]+# DW_AT_name" 1 } } + +struct strukt +{ + int m; +}; + +namespace not_emitted +{ + typedef strukt T; +} + +int +main() +{ + not_emitted::T t; + t.m = 0; + return 0; +} +