aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2021-05-05 12:07:24 +0200
committerEric Botcazou <ebotcazou@adacore.com>2021-05-05 12:14:25 +0200
commit5747baa984d96241e4e2608da3c3e0160e32410b (patch)
tree6c718ca95d9270dbb3f6836ea3140de58533392f /gcc/testsuite/gnat.dg
parentdee371fdd4ae25f837b9b2ded7789d07ed739c9e (diff)
downloadgcc-5747baa984d96241e4e2608da3c3e0160e32410b.zip
gcc-5747baa984d96241e4e2608da3c3e0160e32410b.tar.gz
gcc-5747baa984d96241e4e2608da3c3e0160e32410b.tar.bz2
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.
Diffstat (limited to 'gcc/testsuite/gnat.dg')
-rw-r--r--gcc/testsuite/gnat.dg/debug11.adb20
-rw-r--r--gcc/testsuite/gnat.dg/debug16.adb8
-rw-r--r--gcc/testsuite/gnat.dg/debug17.adb27
-rw-r--r--gcc/testsuite/gnat.dg/debug8.adb8
-rw-r--r--gcc/testsuite/gnat.dg/specs/debug1.ads3
5 files changed, 48 insertions, 18 deletions
diff --git a/gcc/testsuite/gnat.dg/debug11.adb b/gcc/testsuite/gnat.dg/debug11.adb
index 26db5db..0fd9e36 100644
--- a/gcc/testsuite/gnat.dg/debug11.adb
+++ b/gcc/testsuite/gnat.dg/debug11.adb
@@ -1,14 +1,11 @@
--- { dg-do compile }
--- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
--- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
--
--- This testcase checks that in the DWARF description of the variant type
--- below, the C discriminant is properly described as unsigned, hence the 0x5a
--- ('Z') and 0x80 (128) values in the DW_AT_discr_list attribute. If it was
--- described as signed, we would have instead 90 and -128.
---
--- { dg-final { scan-assembler-times "0x5a.*DW_AT_discr_list" 1 } }
--- { dg-final { scan-assembler-times "0x80.*DW_AT_discr_list" 1 } }
+-- This testcase checks that in the DWARF description of the variant type
+-- below, the C discriminant is properly described as unsigned, hence the 0x5a
+-- ('Z') and 0x80 (128) values in the DW_AT_discr_list attribute. If it was
+-- described as signed, we would have instead 90 and -128.
with Ada.Text_IO;
@@ -25,3 +22,6 @@ begin
R.I := 0;
Ada.Text_IO.Put_Line ("" & R.C);
end Debug11;
+
+-- { dg-final { scan-assembler-times "0x5a.*DW_AT_discr_list" 1 } }
+-- { dg-final { scan-assembler-times "0x80.*DW_AT_discr_list" 1 } }
diff --git a/gcc/testsuite/gnat.dg/debug16.adb b/gcc/testsuite/gnat.dg/debug16.adb
index 8752002..5695edb 100644
--- a/gcc/testsuite/gnat.dg/debug16.adb
+++ b/gcc/testsuite/gnat.dg/debug16.adb
@@ -1,6 +1,6 @@
--- { dg-do compile }
--- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
--- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
procedure Debug16 is
@@ -24,4 +24,4 @@ begin
end if;
end;
--- { dg-final { scan-assembler-times "DW_AT_discr" 4 } }
+-- { dg-final { scan-assembler-times "DW_AT_discr" 4 } }
diff --git a/gcc/testsuite/gnat.dg/debug17.adb b/gcc/testsuite/gnat.dg/debug17.adb
new file mode 100644
index 0000000..4f33ecd
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/debug17.adb
@@ -0,0 +1,27 @@
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+
+pragma No_Component_Reordering;
+
+procedure Debug17 (Number_Of_Bits : Natural) is
+
+ type Bitinfos_T is array (Natural range 1 .. Number_Of_Bits) of Float;
+
+ type Inner_Record_T is
+ record
+ Bitinfos : Bitinfos_T := (others => 1.5);
+ Check1 : Integer := 1983;
+ Check2 : Integer := 1995;
+ Flag : Boolean := False;
+ Check3 : Integer := 2005;
+
+ end record;
+
+ Rfield : Inner_Record_T;
+
+begin
+ null;
+end;
+
+-- { dg-final { scan-assembler-not "DW_AT_data_member_location (0)" } }
diff --git a/gcc/testsuite/gnat.dg/debug8.adb b/gcc/testsuite/gnat.dg/debug8.adb
index 882be55..6302be3 100644
--- a/gcc/testsuite/gnat.dg/debug8.adb
+++ b/gcc/testsuite/gnat.dg/debug8.adb
@@ -1,7 +1,6 @@
-- { dg-do compile }
--- { dg-options "-cargs -g -fgnat-encodings=minimal -dA -margs" }
--- { dg-final { scan-assembler-not "DW_OP_const4u" } }
--- { dg-final { scan-assembler-not "DW_OP_const8u" } }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
-- The DW_AT_byte_size attribute DWARF expression for the
-- DW_TAG_structure_type DIE that describes Rec_Type contains the -4u literal.
@@ -27,3 +26,6 @@ procedure Debug8 is
begin
null;
end Debug8;
+
+-- { dg-final { scan-assembler-not "DW_OP_const4u" } }
+-- { dg-final { scan-assembler-not "DW_OP_const8u" } }
diff --git a/gcc/testsuite/gnat.dg/specs/debug1.ads b/gcc/testsuite/gnat.dg/specs/debug1.ads
index f94b42a..9b67427 100644
--- a/gcc/testsuite/gnat.dg/specs/debug1.ads
+++ b/gcc/testsuite/gnat.dg/specs/debug1.ads
@@ -1,5 +1,6 @@
-- { dg-do compile }
--- { dg-options "-cargs -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
package Debug1 is