Generate debug info for local dynamic record types
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 5 May 2021 10:07:24 +0000 (12:07 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Wed, 5 May 2021 10:14:25 +0000 (12:14 +0200)
commit5747baa984d96241e4e2608da3c3e0160e32410b
tree6c718ca95d9270dbb3f6836ea3140de58533392f
parentdee371fdd4ae25f837b9b2ded7789d07ed739c9e
Generate debug info for local dynamic record types

In Ada you can embed VLAs in local record types and thus end up with
dynamic offsets in record types, which are not well described in DWARF
because 1) the temporaries generated for them by the gimplifier are
naturally marked DECL_IGNORED_P and 2) when the types are referenced
in nested subprograms, the DWARF back-end does not correctly handle
the rewritten references.

gcc/
* dwarf2out.c (loc_list_from_tree_1) <DECL>: During early DWARF, do
not expand the VALUE_EXPR of variables put in the non-local frame.
* gimplify.c (gimplify_type_sizes) <RECORD_TYPE>: If the type is not
to be ignored for debug info, ensure its variable offsets are not.
gcc/testsuite/
* gnat.dg/debug8.adb: Minor tweak.
* gnat.dg/debug11.adb: Likewise.
* gnat.dg/debug16.adb: Likewise.
* gnat.dg/debug17.adb: New test.
* gnat.dg/specs/debug1.ads: Minor tweak.
gcc/dwarf2out.c
gcc/gimplify.c
gcc/testsuite/gnat.dg/debug11.adb
gcc/testsuite/gnat.dg/debug16.adb
gcc/testsuite/gnat.dg/debug17.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/debug8.adb
gcc/testsuite/gnat.dg/specs/debug1.ads