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:
Tom Tromey 2020-11-04 08:49:16 -07:00
parent 575673752c
commit c9a28cbed6
4 changed files with 22 additions and 1 deletions

View file

@ -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,