Emit DW_AT_GNU_bias with -fgnat-encodings=gdb.  gdb implements this,
but not the encoded variant.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-09-19  Tom Tromey  <tro...@adacore.com>

gcc/ada/

        * gcc-interface/misc.c (gnat_get_type_bias): Return the bias
        when -fgnat-encodings=gdb.

gcc/testsuite/

        * gnat.dg/bias1.adb: New testcase.
--- gcc/ada/gcc-interface/misc.c
+++ gcc/ada/gcc-interface/misc.c
@@ -1111,7 +1111,7 @@ gnat_get_type_bias (const_tree gnu_type)
 {
   if (TREE_CODE (gnu_type) == INTEGER_TYPE
       && TYPE_BIASED_REPRESENTATION_P (gnu_type)
-      && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
+      && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL)
     return TYPE_RM_MIN_VALUE (gnu_type);
 
   return NULL_TREE;

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/bias1.adb
@@ -0,0 +1,34 @@
+--  { dg-do compile }
+--  { dg-options "-cargs -g -dA -gnatws -fgnat-encodings=gdb -margs" }
+--  { dg-final { scan-assembler "DW_AT_GNU_bias" } }
+
+procedure Bias1 is
+   type Small is range -7 .. -4;
+   for Small'Size use 2;
+   Y : Small := -5;
+   Y1 : Small := -7;
+
+   type Byte is mod 256;
+   type Repeat_Count_T is new Byte range 1 .. 2 ** 6;
+   for Repeat_Count_T'Size use 6;
+   X : Repeat_Count_T := 64;
+   X1 : Repeat_Count_T := 1;
+
+   type Char_Range is range 65 .. 68;
+   for Char_Range'Size use 2;
+   Cval : Char_Range := 65;
+
+   type SomePackedRecord is record
+      R: Small;
+      S: Small;
+   end record;
+   pragma Pack (SomePackedRecord);
+   SPR : SomePackedRecord := (R => -4, S => -5);
+
+   type Packed_Array is array (1 .. 3) of Small;
+   pragma pack (Packed_Array);
+   A : Packed_Array := (-7, -5, -4);
+
+begin
+   null;
+end Bias1;
\ No newline at end of file

Reply via email to