DWARF: allow dynamic data member offsets for inheritance info
authorPierre-Marie de Rodat <derodat@adacore.com>
Mon, 21 Dec 2015 15:44:32 +0000 (15:44 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 21 Dec 2015 15:44:32 +0000 (15:44 +0000)
An unintended effect of the recently introduced machinery to handle
dynamic data member offsets in variable-length records (when
-fgnat-encodings=minimal) prevented GCC from describing correctly
inheritance information for classes in C++, which is a regression.

This change rectifies this machinery in this case.

gcc/ChangeLog:

* dwarf2out.c (add_data_member_location_attribute): Do not
disable dynamic data member offsets descriptions for TREE_BINFO
members.

From-SVN: r231883

gcc/ChangeLog
gcc/dwarf2out.c

index 2f373164e5eee98a6a58c4451c7bd637f1ae7b43..c7626ffc116166a3dc3e025a34a39e40bb959a2e 100644 (file)
@@ -1,3 +1,9 @@
+2015-12-21  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * dwarf2out.c (add_data_member_location_attribute): Do not
+       disable dynamic data member offsets descriptions for TREE_BINFO
+       members.
+
 2015-12-21  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR tree-optimization/65337
index 320a077c0c707eaf309da73f65caf3fd07df6042..0a5cc54ad4e5328ab5d5cfa4058fdb69c4158d88 100644 (file)
@@ -16727,21 +16727,21 @@ add_data_member_location_attribute (dw_die_ref die,
     {
       loc_descr = field_byte_offset (decl, ctx, &offset);
 
-      /* Data member location evalutation start with the base address on the
+      /* If loc_descr is available then we know the field offset is dynamic.
+        However, GDB does not handle dynamic field offsets very well at the
+        moment.  */
+      if (loc_descr != NULL && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
+       {
+         loc_descr = NULL;
+         offset = 0;
+       }
+
+      /* Data member location evalutation starts with the base address on the
         stack.  Compute the field offset and add it to this base address.  */
-      if (loc_descr != NULL)
+      else if (loc_descr != NULL)
        add_loc_descr (&loc_descr, new_loc_descr (DW_OP_plus, 0, 0));
     }
 
-  /* If loc_descr is available then we know the field offset is dynamic.
-     However, GDB does not handle dynamic field offsets very well at the
-     moment.  */
-  if (loc_descr != NULL && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
-    {
-      loc_descr = NULL;
-      offset = 0;
-    }
-
   if (! loc_descr)
     {
       if (dwarf_version > 2)