d: RHS value lost when a target_expr modifies LHS in a cond_expr
authorIain Buclaw <ibuclaw@gdcproject.org>
Fri, 2 Jul 2021 22:13:29 +0000 (00:13 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Fri, 2 Jul 2021 22:43:57 +0000 (00:43 +0200)
commitc77230856eac2d28eb7bf10985846885c3c8727b
treed77253582b8c4ac0a89be0a27b423ce53150e283
parent6feb628a706e86eb3f303aff388c74bdb29e7381
d: RHS value lost when a target_expr modifies LHS in a cond_expr

To prevent the RHS of an assignment modifying the LHS before the
assignment proper, a target_expr is forced so that function calls that
return with slot optimization modify the temporary instead.  This did
not work for conditional expressions however, to give one example.  So
now the RHS is always forced to a temporary.

PR d/101282

gcc/d/ChangeLog:

* d-codegen.cc (build_assign): Force target_expr on RHS for non-POD
assignment expressions.

gcc/testsuite/ChangeLog:

* gdc.dg/torture/pr101282.d: New test.
gcc/d/d-codegen.cc
gcc/testsuite/gdc.dg/torture/pr101282.d [new file with mode: 0644]