Fix bug in Ada aggregate assignment

The expression rewrite caused a regression in the internal AdaCore
test suite.  The bug was that I had dropped a bit of code from
aggregate assignment -- assign_aggregate used to return the container,
which I thought was redundant, but which can actually change during
the call.  There was no test for this case in the tree, so I've added
one.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (ada_aggregate_operation::assign_aggregate): Return
	container.
	(ada_assign_operation::evaluate): Update.
	* ada-exp.h (class ada_aggregate_operation) <assign_aggregate>:
	Change return type.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/assign_arr/target_wrapper.ads (IArray, Put, Do_Nothing):
	Declare.
	* gdb.ada/assign_arr/target_wrapper.adb: New file.
	* gdb.ada/assign_arr/main_p324_051.adb (IValue): New variable.
	Call Put.
	* gdb.ada/assign_arr.exp: Update.
This commit is contained in:
Tom Tromey
2021-03-15 06:23:12 -06:00
parent 1996d0f12c
commit 207582c075
8 changed files with 72 additions and 11 deletions

View File

@@ -510,11 +510,12 @@ public:
type, evaluate an assignment of this aggregate's value to LHS.
CONTAINER is an lvalue containing LHS (possibly LHS itself).
Does not modify the inferior's memory, nor does it modify the
contents of LHS (unless == CONTAINER). */
contents of LHS (unless == CONTAINER). Returns the modified
CONTAINER. */
void assign_aggregate (struct value *container,
struct value *lhs,
struct expression *exp);
value *assign_aggregate (struct value *container,
struct value *lhs,
struct expression *exp);
value *evaluate (struct type *expect_type,
struct expression *exp,