]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/dwarf2out.c
PR debug/49090
[thirdparty/gcc.git] / gcc / dwarf2out.c
index d7faaac9f85905475d4fe709c5e8beeb1979e89f..51e57378dad7127fc5ddce52f07ebd66cd7d0565 100644 (file)
@@ -10238,6 +10238,7 @@ gen_generic_params_dies (tree t)
   tree parms, args;
   int parms_num, i;
   dw_die_ref die = NULL;
+  int non_default;
 
   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
     return;
@@ -10257,9 +10258,14 @@ gen_generic_params_dies (tree t)
 
   parms_num = TREE_VEC_LENGTH (parms);
   args = lang_hooks.get_innermost_generic_args (t);
+  if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
+    non_default = int_cst_value (TREE_CHAIN (args));
+  else
+    non_default = TREE_VEC_LENGTH (args);
   for (i = 0; i < parms_num; i++)
     {
       tree parm, arg, arg_pack_elems;
+      dw_die_ref parm_die;
 
       parm = TREE_VEC_ELT (parms, i);
       arg = TREE_VEC_ELT (args, i);
@@ -10274,12 +10280,14 @@ gen_generic_params_dies (tree t)
             pack elements of ARG. Note that ARG would then be
             an argument pack.  */
          if (arg_pack_elems)
-           template_parameter_pack_die (TREE_VALUE (parm),
-                                        arg_pack_elems,
-                                        die);
+           parm_die = template_parameter_pack_die (TREE_VALUE (parm),
+                                                   arg_pack_elems,
+                                                   die);
          else
-           generic_parameter_die (TREE_VALUE (parm), arg,
-                                  true /* Emit DW_AT_name */, die);
+           parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
+                                             true /* emit name */, die);
+         if (i >= non_default)
+           add_AT_flag (parm_die, DW_AT_default_value, 1);
        }
     }
 }