diff mbox

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

Message ID 5678099D.9030305@adacore.com
State New
Headers show

Commit Message

Pierre-Marie de Rodat Dec. 21, 2015, 2:15 p.m. UTC
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?

Comments

Jason Merrill Dec. 21, 2015, 3:39 p.m. UTC | #1
OK, thanks.

Jason
Pierre-Marie de Rodat Dec. 21, 2015, 3:44 p.m. UTC | #2
On 12/21/2015 04:39 PM, Jason Merrill wrote:
> OK, thanks.

Committed. Thank you again!
diff mbox

Patch

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