This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCHES, PING*5] Enhance standard DWARF for Ada


On 12/18/2015 09:23 PM, Pierre-Marie de Rodat wrote:
On 12/18/2015 06:56 PM, Jason Merrill wrote:
These broke a lot of tests in the GDB C++ testsuite.  Specifically, the
commit

     DWARF: handle variable-length records and variant parts

Arg, sad to hear that! I did testing at some point with the GDB
testsuiteâ Iâll investigate on Monday, thank you for the heads up.

All the regressions I could reproduce have a single cause: an oversight in protective code. That patch tries to disable dynamic data member offset generation by default because GDB does not handle it very well right now. But it should not disable this for DW_TAG_inheritance, in which dynamic data member offset *is* supported by GDB.

The attached patch fixes this oversight. Bootstrapped and regtested on x86_64-linux; I also made sure it fixed the GDB regressions on the same platform (for Ada, C, C++ and Fortran). Ok to commit?

--
Pierre-Marie de Rodat
>From bd4bd565391a54f40c9f882c2df91ec48e841c99 Mon Sep 17 00:00:00 2001
From: Pierre-Marie de Rodat <derodat@adacore.com>
Date: Mon, 21 Dec 2015 15:04:59 +0100
Subject: [PATCH] DWARF: allow dynamic data member offsets for inheritance info

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.
---
 gcc/dwarf2out.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 320a077..0a5cc54 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -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)
-- 
2.3.3.199.g52cae64


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]