aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-loop-versioning.cc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2023-07-02 03:24:53 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2023-07-02 03:37:05 +0200
commit80ae426a195a0d035640a6301da833564deade52 (patch)
tree0aa16cb1bc0df8e8c80db61da2aa46373ff2b0d4 /gcc/gimple-loop-versioning.cc
parent67e0967b32af60cdf5a0c3e811bfa63c30dcdb76 (diff)
downloadgcc-80ae426a195a0d035640a6301da833564deade52.zip
gcc-80ae426a195a0d035640a6301da833564deade52.tar.gz
gcc-80ae426a195a0d035640a6301da833564deade52.tar.bz2
d: Fix core.volatile.volatileLoad discarded if result is unused
The first pass of code generation in the D front-end splits up all compound expressions and discards expressions that have no side effects. This included calls to the `volatileLoad' intrinsic if its result was not used, causing such calls to be eliminated from the program. We already set TREE_THIS_VOLATILE on the expression, however the tree documentation says if this bit is set in an expression, so is TREE_SIDE_EFFECTS. So set TREE_SIDE_EFFECTS on the expression too. This prevents any early discarding from occuring. PR d/110516 gcc/d/ChangeLog: * intrinsics.cc (expand_volatile_load): Set TREE_SIDE_EFFECTS on the expanded expression. (expand_volatile_store): Likewise. gcc/testsuite/ChangeLog: * gdc.dg/torture/pr110516a.d: New test. * gdc.dg/torture/pr110516b.d: New test.
Diffstat (limited to 'gcc/gimple-loop-versioning.cc')
0 files changed, 0 insertions, 0 deletions