From 6b71bf7b7970ca6b56f1477fbeb8c75c85b99a8b Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 31 Jan 2013 16:33:57 +0000 Subject: [PATCH] PR c++/54410 * dwarf2out.c (gen_struct_or_union_type_die): Always schedule template parameters the first time. (gen_scheduled_generic_parms_dies): Check completeness here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195613 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/dwarf2out.c | 12 ++++++------ gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C | 9 +++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8d2d640ed3..880dff8ded6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-01-31 Jason Merrill + + PR c++/54410 + * dwarf2out.c (gen_struct_or_union_type_die): Always schedule template + parameters the first time. + (gen_scheduled_generic_parms_dies): Check completeness here. + 2013-01-31 Richard Biener PR middle-end/53073 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5a03280ca73..3106dd937a0 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -19061,6 +19061,10 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, scope_die = scope_die_for (type, context_die); + /* Generate child dies for template paramaters. */ + if (!type_die && debug_info_level > DINFO_LEVEL_TERSE) + schedule_generic_params_dies_gen (type); + if (! type_die || (nested && is_cu_die (scope_die))) /* First occurrence of type or toplevel definition of nested class. */ { @@ -19078,11 +19082,6 @@ gen_struct_or_union_type_die (tree type, dw_die_ref context_die, else remove_AT (type_die, DW_AT_declaration); - /* Generate child dies for template paramaters. */ - if (debug_info_level > DINFO_LEVEL_TERSE - && COMPLETE_TYPE_P (type)) - schedule_generic_params_dies_gen (type); - /* If this type has been completed, then give it a byte_size attribute and then give a list of members. */ if (complete && !ns_decl) @@ -20592,7 +20591,8 @@ gen_scheduled_generic_parms_dies (void) return; FOR_EACH_VEC_ELT (*generic_type_instances, i, t) - gen_generic_params_dies (t); + if (COMPLETE_TYPE_P (t)) + gen_generic_params_dies (t); } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C new file mode 100644 index 00000000000..8000295537c --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C @@ -0,0 +1,9 @@ +// PR c++/54410 +// { dg-options "-g -dA" } +// { dg-final { scan-assembler-times "DIE \\(\[^\n\]*\\) DW_TAG_template_type_param" 1 } } + +namespace N { + template struct A { }; +} + +N::A a; -- 2.11.4.GIT