Reject slicing a packed array
In Ada mode, gdb rejects slicing a packed array. However, with -fgnat-encodings=minimal, gdb will instead print incorrect results. This patch changes gdb to also reject slicing a packed array in this mode. FWIW I believe that this rejection is a gdb limitation. Removing it looked complicated, though, and meanwhile my main goal for the time being is to bring the DWARF encodings up to par with Gnat encodings. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_is_any_packed_array_type): New function. (ada_evaluate_subexp) <case TERNOP_SLICE>: Use it. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/mod_from_name.exp: Test printing slice.
This commit is contained in:
parent
575673752c
commit
c9a28cbed6
4 changed files with 22 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* ada-lang.c (ada_is_any_packed_array_type): New function.
|
||||
(ada_evaluate_subexp) <case TERNOP_SLICE>: Use it.
|
||||
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* dwarf2/read.c (recognize_bound_expression)
|
||||
|
|
|
@ -2012,6 +2012,17 @@ ada_is_unconstrained_packed_array_type (struct type *type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Return true if TYPE is a (Gnat-encoded) constrained packed array
|
||||
type, or if it is an ordinary (non-Gnat-encoded) packed array. */
|
||||
|
||||
static bool
|
||||
ada_is_any_packed_array_type (struct type *type)
|
||||
{
|
||||
return (ada_is_constrained_packed_array_type (type)
|
||||
|| (type->code () == TYPE_CODE_ARRAY
|
||||
&& TYPE_FIELD_BITSIZE (type, 0) % 8 != 0));
|
||||
}
|
||||
|
||||
/* Given that TYPE encodes a packed array type (constrained or unconstrained),
|
||||
return the size of its elements in bits. */
|
||||
|
||||
|
@ -10609,7 +10620,7 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
|
|||
TYPE_TARGET_TYPE (value_type (array)) =
|
||||
ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
|
||||
|
||||
if (ada_is_constrained_packed_array_type (value_type (array)))
|
||||
if (ada_is_any_packed_array_type (value_type (array)))
|
||||
error (_("cannot slice a packed array"));
|
||||
|
||||
/* If this is a reference to an array or an array lvalue,
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* gdb.ada/mod_from_name.exp: Test printing slice.
|
||||
|
||||
2020-11-04 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* gdb.ada/O2_float_param.exp: Test different -fgnat-encodings
|
||||
|
|
|
@ -40,4 +40,5 @@ foreach_with_prefix scenario {all minimal} {
|
|||
}
|
||||
gdb_test "print xp" \
|
||||
"= \\(y => \\(-1, -2, -3, -4, -5, -6, -7, -8, -9, -10\\)\\)"
|
||||
gdb_test "print slice" "cannot slice a packed array"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue