https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110516

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Iain Buclaw
<ibuc...@gcc.gnu.org>:

https://gcc.gnu.org/g:b224692084e40aabcba1e73166eedf55dfd7f563

commit r12-9749-gb224692084e40aabcba1e73166eedf55dfd7f563
Author: Iain Buclaw <ibuc...@gdcproject.org>
Date:   Sun Jul 2 03:24:53 2023 +0200

    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.

    (cherry picked from commit 80ae426a195a0d035640a6301da833564deade52)

Reply via email to