aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2024-02-10 11:28:00 +0100
committerJakub Jelinek <jakub@redhat.com>2024-02-10 11:28:00 +0100
commit39920447f876128ff7942a9cd931021800865894 (patch)
treec38e25b273bdc97dcbf628e090e81dc33a9a437b /libgcc
parent8427290f33d95bc173d37637fbec044b2c067f14 (diff)
downloadgcc-39920447f876128ff7942a9cd931021800865894.zip
gcc-39920447f876128ff7942a9cd931021800865894.tar.gz
gcc-39920447f876128ff7942a9cd931021800865894.tar.bz2
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 <jakub@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.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions