[gdb/symtab] Warn about unresolved DW_AT_upper_bound/DW_AT_count
authorTom de Vries <tdevries@suse.de>
Wed, 18 Jul 2018 16:33:07 +0000 (18:33 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 25 Jul 2018 22:08:52 +0000 (00:08 +0200)
This patch generates a warning if DW_AT_upper_bound or DW_AT_count is defined,
but can't be translated.  This is triggered for current gcc in lto mode for
vla test-cases.

Build and reg-tested on x86_64-linux.

2018-07-26  Tom de Vries  <tdevries@suse.de>

* dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or
DW_AT_count can't be translated to a dynamic prop.

gdb/ChangeLog
gdb/dwarf2read.c

index d6d96db62a70cb6f49b472fa339d10362bdd7449..ee5c9ea478e2bdb122261ea65620be3bd7d2caf0 100644 (file)
@@ -1,3 +1,8 @@
+2018-07-26  Tom de Vries  <tdevries@suse.de>
+
+       * dwarf2read.c (read_subrange_type): Warn if DW_AT_upper_bound or
+       DW_AT_count can't be translated to a dynamic prop.
+
 2018-07-25  Tom de Vries  <tdevries@suse.de>
 
        * dwarf2loc.c (dwarf2_locexpr_baton_eval): Wrap ctx.eval call in
index 45280fec410f72fc3452741570efb9efaf06462b..de6b9f13a09d0b72fa9ea9605be4bee9b0d1387f 100644 (file)
@@ -17626,10 +17626,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
               sect_offset_str (die->sect_off),
               objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
 
-  attr = dwarf2_attr (die, DW_AT_upper_bound, cu);
+  struct attribute *attr_ub, *attr_count;
+  attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu);
   if (!attr_to_dynamic_prop (attr, die, cu, &high))
     {
-      attr = dwarf2_attr (die, DW_AT_count, cu);
+      attr = attr_count = dwarf2_attr (die, DW_AT_count, cu);
       if (attr_to_dynamic_prop (attr, die, cu, &high))
        {
          /* If bounds are constant do the final calculation here.  */
@@ -17638,6 +17639,20 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
          else
            high_bound_is_count = 1;
        }
+      else
+       {
+         if (attr_ub != NULL)
+           complaint (_("Unresolved DW_AT_upper_bound "
+                        "- DIE at %s [in module %s]"),
+                      sect_offset_str (die->sect_off),
+                      objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
+         if (attr_count != NULL)
+           complaint (_("Unresolved DW_AT_count "
+                        "- DIE at %s [in module %s]"),
+                      sect_offset_str (die->sect_off),
+                      objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
+       }
+       
     }
 
   /* Dwarf-2 specifications explicitly allows to create subrange types