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

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:39920447f876128ff7942a9cd931021800865894

commit r14-8910-g39920447f876128ff7942a9cd931021800865894
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Sat Feb 10 11:28:00 2024 +0100

    gimple-low: Fix up handling of volatile automatic vars in assume attribute
[PR110754]

    As the following testcases show, the gimple-low outlining of assume
    magic functions handled volatile automatic vars (including
    parameters/results) like non-volatile ones except it copied volatile
    to the new PARM_DECL, which has the undesirable effect that a load
    from the volatile var is passed to IFN_ASSUME and so there is a
    side-effect there even when side-effects of the assume attribute
    shouldn't be evaluated.

    The following patch fixes that by passing address of the volatile
    variables/parameters/results instead and doing loads or stores from it
    or to it where it was originally accessed in the assume attribute
    expression.

    2024-02-10  Jakub Jelinek  <ja...@redhat.com>

            PR middle-end/110754
            * gimple-low.cc (assumption_copy_decl): For TREE_THIS_VOLATILE
            decls create PARM_DECL with pointer to original type, set
            TREE_READONLY and keep TREE_THIS_VOLATILE, TREE_ADDRESSABLE,
            DECL_NOT_GIMPLE_REG_P and DECL_BY_REFERENCE cleared.
            (adjust_assumption_stmt_op): For remapped TREE_THIS_VOLATILE decls
            wrap PARM_DECL into a simple TREE_THIS_NO_TRAP MEM_REF.
            (lower_assumption): For TREE_THIS_VOLATILE vars pass ADDR_EXPR
            of the var as argument.

            * gcc.dg/attr-assume-6.c: New test.
            * g++.dg/cpp23/attr-assume12.C: New test.

Reply via email to