diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-lang.c | 3 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 3 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb | 1 |
7 files changed, 28 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2e21613..00d36ab 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-05-26 Tom Tromey <tromey@adacore.com> + + * ada-lang.c (value_val_atr): Handle TYPE_CODE_RANGE. + * gdbtypes.c (discrete_position): Handle TYPE_CODE_RANGE. + 2020-05-25 Cristiano De Alti <cristiano_dealti@hotmail.com> PR gdb/13519 diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 7522917..5ffb2d6 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -9148,6 +9148,9 @@ value_val_atr (struct type *type, struct value *arg) if (!integer_type_p (value_type (arg))) error (_("'VAL requires integral argument")); + if (type->code () == TYPE_CODE_RANGE) + type = TYPE_TARGET_TYPE (type); + if (type->code () == TYPE_CODE_ENUM) { long pos = value_as_long (arg); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 4fe8d9a..2ee6989 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1155,6 +1155,9 @@ get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound) int discrete_position (struct type *type, LONGEST val, LONGEST *pos) { + if (type->code () == TYPE_CODE_RANGE) + type = TYPE_TARGET_TYPE (type); + if (type->code () == TYPE_CODE_ENUM) { int i; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 50473fc..0cc377f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2020-05-26 Tom Tromey <tromey@adacore.com> + + * gdb.ada/arr_acc_idx_w_gap.exp: Add enum subrange tests. + * gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads (Enum_Subrange): New + type. + * gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb (V): New + variable. + 2020-05-26 Christian Biesinger <cbiesinger@google.com> * Makefile.in: Use = instead of == for the test command diff --git a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp index fd7ac44..c08070e 100644 --- a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp +++ b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap.exp @@ -53,3 +53,7 @@ gdb_test "print indexed_by_enum(lit2..lit4)" \ " = \\(lit2 => 43, 42, 41\\)" gdb_test "print s(2..4)" \ " = \"ell\"" + +gdb_test "print v" " = lit3" +gdb_test "print enum_subrange'pos(v)" " = 3" +gdb_test "print enum_subrange'val(3)" " = lit3" diff --git a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads index 6e073e8..7193800 100644 --- a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads +++ b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads @@ -34,14 +34,16 @@ package Enum_With_Gap is ); for Enum_With_Gaps'size use 16; + type Enum_Subrange is new Enum_With_Gaps range Lit1 .. Lit3; + type MyWord is range 0 .. 16#FFFF# ; for MyWord'Size use 16; type AR is array (Enum_With_Gaps range <>) of MyWord; type AR_Access is access AR; - + type String_Access is access String; - + procedure Do_Nothing (E : AR_Access); procedure Do_Nothing (E : String_Access); diff --git a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb index da37dd7..752b883 100644 --- a/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb +++ b/gdb/testsuite/gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb @@ -19,6 +19,7 @@ procedure Enum_With_Gap_Main is Indexed_By_Enum : AR_Access := new AR'(LIT1 => 1, LIT2 => 43, LIT3 => 42, LIT4 => 41); S : String_Access := new String'("Hello!"); + V : Enum_Subrange := LIT3; begin Do_Nothing (Indexed_By_Enum); -- BREAK Do_Nothing (S); |