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]>
