re PR debug/54410 (doubled DW_TAG_template_type_param)
authorJason Merrill <jason@redhat.com>
Thu, 31 Jan 2013 16:33:57 +0000 (11:33 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 31 Jan 2013 16:33:57 +0000 (11:33 -0500)
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.

From-SVN: r195613

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/g++.dg/debug/dwarf2/template-params-11.C [new file with mode: 0644]

index a8d2d64..880dff8 100644 (file)
@@ -1,3 +1,10 @@
+2013-01-31  Jason Merrill  <jason@redhat.com>
+
+       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  <rguenther@suse.de>
 
        PR middle-end/53073
index 5a03280..3106dd9 100644 (file)
@@ -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 (file)
index 0000000..8000295
--- /dev/null
@@ -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 <class T> struct A { };
+}
+
+N::A<int> a;