Fix bug in assignment to nested packed structure
A user at AdaCore found a case where assignment to a nested packed structure would fail. The bug is that ada_value_primitive_field doesn't account for the situation where a field is not packed relative to its containing structure, but where the structure itself is packed in its parent. gdb/ChangeLog 2019-05-01 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_value_primitive_field): Treat more fields as bitfields. gdb/testsuite/ChangeLog 2019-05-01 Tom Tromey <tromey@adacore.com> * gdb.ada/packed_array_assign/aggregates.ads (Nested_Packed): New record. (NPR): New variable. * gdb.ada/packed_array_assign.exp: Add nested packed assignment test.
This commit is contained in:
parent
d48e62f4a2
commit
4504bbdec5
5 changed files with 27 additions and 3 deletions
|
@ -7189,9 +7189,10 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
|
|||
arg_type = ada_check_typedef (arg_type);
|
||||
type = TYPE_FIELD_TYPE (arg_type, fieldno);
|
||||
|
||||
/* Handle packed fields. */
|
||||
|
||||
if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
|
||||
/* Handle packed fields. It might be that the field is not packed
|
||||
relative to its containing structure, but the structure itself is
|
||||
packed; in this case we must take the bit-field path. */
|
||||
if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
|
||||
{
|
||||
int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
|
||||
int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue