]> git.ipfire.org Git - thirdparty/gcc.git/commit
tree-optimization/118954 - avoid UB on ref created by predcom
authorRichard Biener <rguenther@suse.de>
Fri, 21 Feb 2025 08:58:04 +0000 (09:58 +0100)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 21 Feb 2025 12:05:13 +0000 (13:05 +0100)
commitee30e2586a3142e63daaf301a561984f1d22d38d
treeef6b94c08353f1e8a6fb4a839f6d092020c0b5f7
parentd2720051c419a781a2f04daadcbefc99fa77b051
tree-optimization/118954 - avoid UB on ref created by predcom

When predicitive commoning moves an invariant ref it makes sure to
not build a MEM_REF with a base that is negatively offsetted from
an object.  But in trying to preserve some transforms it does not
consider association of a constant offset with the address computation
in DR_BASE_ADDRESS leading to exactly this problem again.  This is
arguably a problem in data-ref analysis producing such an out-of-bound
DR_BASE_ADDRESS, but this looks quite involved to fix, so the
following avoids the association in one more case.  This fixes the
testcase while preserving the desired transform in
gcc.dg/tree-ssa/predcom-1.c.

PR tree-optimization/118954
* tree-predcom.cc (ref_at_iteration): Make sure to not
associate the constant offset with DR_BASE_ADDRESS when
that is an offsetted pointer.

* gcc.dg/torture/pr118954.c: New testcase.
gcc/testsuite/gcc.dg/torture/pr118954.c [new file with mode: 0644]
gcc/tree-predcom.cc