]> gcc.gnu.org Git - gcc.git/commit
[Ada] Excess finalization on assignment with target name symbol
authorGary Dismukes <dismukes@adacore.com>
Fri, 28 Jan 2022 01:17:03 +0000 (20:17 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 11 May 2022 08:53:19 +0000 (08:53 +0000)
commit42c0119157824beb106345faa4b100c10dbb38cc
tree55c101eaf07b37b63b826fa5ae3f212ac66821f4
parent6281d36342c29cdd9acb32032f59bf440953c942
[Ada] Excess finalization on assignment with target name symbol

In cases where the Ada 2022 feature of target name symbols (@) is used
and the evaluation of the name is side-effect free, the compiler creates
a temporary object to hold the value of the target object for use as
the value of "@" symbols in the right-hand side expression. In the case
where the target's type is controlled, or has controlled subcomponents,
this can result in extra finalization calls (for the temporary object).
The correction is to bypass the use of a temp and fall back on the more
general approach of creating and calling a procedure with an in-out
parameter for performing the assignment.

gcc/ada/

* exp_ch5.adb (Expand_Assign_With_Target_Names): Bypass the temp
object approach in the case where the type of the LHS is
controlled or has controlled subcomponents (Needs_Finalization
is True), and use the procedure approach instead.
gcc/ada/exp_ch5.adb
This page took 0.061153 seconds and 6 git commands to generate.