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

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Kyrylo Tkachov <[email protected]>:

https://gcc.gnu.org/g:7ae96151ed91609c331d7199e71cf14072c120fd

commit r17-4242-g7ae96151ed91609c331d7199e71cf14072c120fd
Author: Kyrylo Tkachov <[email protected]>
Date:   Thu Sep 3 18:27:04 2026 +0200

    middle-end: Check GIMPLE memory LHSs as stores [PR127184]

    tree_could_trap_p describes evaluation as an rvalue.  However,
    gimple_could_trap_p_1 uses it for an assignment LHS when store checks are
    requested.  It also scans the LHS of other statements as an rvalue.  A load
    can be safe while a store to the same address can trap.

    Use gimple_store_p and lhs_could_trap_p for memory LHSs when store checks
are
    requested.  This keeps register definitions as non-stores and includes
memory
    results of GIMPLE_CALL.  Omit every statement LHS from the rvalue operand
    scan.

    A nothrow call statement can still trap when the caller stores its result.
    The return-slot optimization flag permits direct construction in the
    destination, but expansion can use a temporary and a caller-side copy. 
Check
    a memory call LHS when non-call exceptions are enabled.

    Add self-tests for register definitions, assignment stores, and call result
    stores.  Add a non-call exception test for nothrow call results.

    Bootstrapped and tested on aarch64-unknown-linux-gnu.  Tested on
    x86_64-pc-linux-gnu.

            PR middle-end/127184

    gcc/ChangeLog:

            * gimple.cc (gimple_could_trap_p_1): Check a memory LHS with
            lhs_could_trap_p.  Do not inspect an LHS as an rvalue.
            (test_could_trap): New self-test.
            (gimple_cc_tests): Run it.
            * tree-eh.cc (stmt_could_throw_p): Check a nothrow call's memory
LHS.

    gcc/testsuite/ChangeLog:

            * g++.dg/eh/noncall-store-call.C: New test.

    Signed-off-by: Kyrylo Tkachov <[email protected]>

Reply via email to