[Ada] Improve code generated for assignment of dynamic record aggregates
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 24 Mar 2020 13:57:09 +0000 (14:57 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 12 Jun 2020 08:29:26 +0000 (04:29 -0400)
commita80b1eb72d6f227fc7d1cca36a6c29614a80ab10
tree460771b890dc690cf5337ac8acdbe29a598e0c85
parente2b7399e34bab3aec45af99da7c31eb571f27f21
[Ada] Improve code generated for assignment of dynamic record aggregates

2020-06-12  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_aggr.adb: Add with and use clauses for Sem_Mech.
(Get_Base_Object): New function to get the base object of a node.
(In_Place_Assign_OK): Add Target_Object parameter.  Deal with a
qualified expression on entry.  Remove short-circuit for array
aggregates with a single "others" choice.  Do not look into the
components of the aggregate if the parent is an allocator.
(Check_Component): Add T_OK parameter and rewrite.
(Safe_Component): Invoke Check_Component with T_OK set to False.
(Convert_To_Assignments): Try to use an in-place assignment for
any target; for that, call Get_Base_Object on the target and pass
the result to In_Place_Assign_OK.
(Expand_Array_Aggregate): Use Parent_Kind and Parent_Node more
consistently.  For an assignment, call Get_Base_Object on the
target and pass the result to In_Place_Assign_OK.
gcc/ada/exp_aggr.adb