Fix debug info for discriminated record types

Message ID 2373481.7fSg0krngQ@polaris
State New
Headers show
Series
  • Fix debug info for discriminated record types
Related show

Commit Message

Eric Botcazou July 3, 2019, 10:12 a.m.
Hi,

this is a regression present on the mainline and 9 branch: since
  https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01066.html
the debug info emitted in Ada with -fgnat-encodings=minimal for discriminated 
record types containing an array component whose bound is a discriminant is 
incomplete, i.e. the DW_AT_*_bound attribute of the range subtype is missing.

Tested on x86_64-suse-linux, OK for mainline and 9 branch?


2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>

	* dwarf2out.c (add_scalar_info): Add back refererence to existing DIE
	if it has the DW_AT_data_member_location attribute.


2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>

	* gnat.dg/specs/debug1.ads: New test.
	
-- 
Eric Botcazou

Comments

Richard Biener July 3, 2019, 11:41 a.m. | #1
On Wed, Jul 3, 2019 at 12:12 PM Eric Botcazou <ebotcazou@adacore.com> wrote:
>

> Hi,

>

> this is a regression present on the mainline and 9 branch: since

>   https://gcc.gnu.org/ml/gcc-patches/2018-08/msg01066.html

> the debug info emitted in Ada with -fgnat-encodings=minimal for discriminated

> record types containing an array component whose bound is a discriminant is

> incomplete, i.e. the DW_AT_*_bound attribute of the range subtype is missing.

>

> Tested on x86_64-suse-linux, OK for mainline and 9 branch?


OK.

Richard.

>

> 2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>

>

>         * dwarf2out.c (add_scalar_info): Add back refererence to existing DIE

>         if it has the DW_AT_data_member_location attribute.

>

>

> 2019-07-03  Eric Botcazou  <ebotcazou@adacore.com>

>

>         * gnat.dg/specs/debug1.ads: New test.

>

> --

> Eric Botcazou

Patch

Index: dwarf2out.c
===================================================================
--- dwarf2out.c	(revision 272930)
+++ dwarf2out.c	(working copy)
@@ -20845,6 +20845,7 @@  add_scalar_info (dw_die_ref die, enum dw
 	  if (decl_die != NULL)
 	    {
 	      if (get_AT (decl_die, DW_AT_location)
+		  || get_AT (decl_die, DW_AT_data_member_location)
 		  || get_AT (decl_die, DW_AT_const_value))
 		{
 		  add_AT_die_ref (die, attr, decl_die);