diff options
author | Tom Tromey <tromey@adacore.com> | 2019-04-29 09:55:39 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2019-05-01 08:09:22 -0600 |
commit | 4504bbdec57c77b6468838276e62b2137eedfdd5 (patch) | |
tree | eabe799da4aabe549b571f5601c2d74b92940d79 /gdb/testsuite/gdb.ada | |
parent | d48e62f4a263a871b7a62793e8000625735bc2f6 (diff) | |
download | gdb-4504bbdec57c77b6468838276e62b2137eedfdd5.zip gdb-4504bbdec57c77b6468838276e62b2137eedfdd5.tar.gz gdb-4504bbdec57c77b6468838276e62b2137eedfdd5.tar.bz2 |
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.
Diffstat (limited to 'gdb/testsuite/gdb.ada')
-rw-r--r-- | gdb/testsuite/gdb.ada/packed_array_assign.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads | 7 |
2 files changed, 10 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.ada/packed_array_assign.exp b/gdb/testsuite/gdb.ada/packed_array_assign.exp index 8ed2d63..407ea9c 100644 --- a/gdb/testsuite/gdb.ada/packed_array_assign.exp +++ b/gdb/testsuite/gdb.ada/packed_array_assign.exp @@ -33,3 +33,6 @@ gdb_test "print pra(1) := pr" \ " = \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\)" gdb_test "print pra(1)" \ " = \\(packed_array_assign_w => 104, packed_array_assign_x => 2, packed_array_assign_y => 3\\)" + +gdb_test "print npr := (q000 => 3, r000 => (packed_array_assign_x => 6, packed_array_assign_y => 1, packed_array_assign_w => 117))" \ + " = \\(q000 => 3, r000 => \\(packed_array_assign_w => 117, packed_array_assign_x => 6, packed_array_assign_y => 1\\)\\)" diff --git a/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads b/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads index f0d0525..d1b0552 100644 --- a/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads +++ b/gdb/testsuite/gdb.ada/packed_array_assign/aggregates.ads @@ -25,6 +25,12 @@ package Aggregates is type Packed_RecArr is array (Integer range <>) of Packed_Rec; pragma Pack (Packed_RecArr); + type Nested_Packed is record + Q000 : Int; + R000 : Packed_Rec; + end record; + pragma Pack (Nested_Packed); + procedure Run_Test; private @@ -32,4 +38,5 @@ private Packed_Array_Assign_W => 104, Packed_Array_Assign_X => 2); PRA : Packed_RecArr (1 .. 3); + NPR : Nested_Packed := (q000 => 3, r000 => (packed_array_assign_x => 6, packed_array_assign_y => 1, packed_array_assign_w => 117)); end Aggregates; |