aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/constraint.cc
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2022-01-27 20:17:03 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2022-05-11 08:53:19 +0000
commit42c0119157824beb106345faa4b100c10dbb38cc (patch)
tree55c101eaf07b37b63b826fa5ae3f212ac66821f4 /gcc/cp/constraint.cc
parent6281d36342c29cdd9acb32032f59bf440953c942 (diff)
downloadgcc-42c0119157824beb106345faa4b100c10dbb38cc.zip
gcc-42c0119157824beb106345faa4b100c10dbb38cc.tar.gz
gcc-42c0119157824beb106345faa4b100c10dbb38cc.tar.bz2
[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.
Diffstat (limited to 'gcc/cp/constraint.cc')
0 files changed, 0 insertions, 0 deletions