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