]> git.ipfire.org Git - thirdparty/gcc.git/commit
middle-end/111818 - failed DECL_NOT_GIMPLE_REG_P setting of volatile
authorRichard Biener <rguenther@suse.de>
Mon, 16 Oct 2023 10:50:46 +0000 (12:50 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 10 Nov 2023 13:23:43 +0000 (14:23 +0100)
commitffb0615cf1aa628ca8aa10bda31fe1bc554eccf3
tree16fb2b494558bbb997c3e7be8657ac631dd06461
parentdb010f96743a4f289975a0432209c38ec34635e9
middle-end/111818 - failed DECL_NOT_GIMPLE_REG_P setting of volatile

The following addresses a missed DECL_NOT_GIMPLE_REG_P setting of
a volatile declared parameter which causes inlining to substitute
a constant parameter into a context where its address is required.

The main issue is in update_address_taken which clears
DECL_NOT_GIMPLE_REG_P from the parameter but fails to rewrite it
because is_gimple_reg returns false for volatiles.  The following
changes maybe_optimize_var to make the 1:1 correspondence between
clearing DECL_NOT_GIMPLE_REG_P of a register typed decl and
actually rewriting it to SSA.

PR middle-end/111818
* tree-ssa.cc (maybe_optimize_var): When clearing
DECL_NOT_GIMPLE_REG_P always rewrite into SSA.

* gcc.dg/torture/pr111818.c: New testcase.

(cherry picked from commit ce55521bcd149fdc431f1d78e706b66d470210ae)
gcc/testsuite/gcc.dg/torture/pr111818.c [new file with mode: 0644]
gcc/tree-ssa.cc