diff options
author | Richard Biener <rguenther@suse.de> | 2024-02-13 10:04:31 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2024-02-13 11:45:24 +0100 |
commit | af6d8d0cc1ac56eba55ef658c664236208f88169 (patch) | |
tree | da85b783098fe593ffa044182ac3e8a2c54434c4 | |
parent | 2ca373b7e8adf9cc0c17aecab5e1cc6c76a92f4c (diff) | |
download | gcc-af6d8d0cc1ac56eba55ef658c664236208f88169.zip gcc-af6d8d0cc1ac56eba55ef658c664236208f88169.tar.gz gcc-af6d8d0cc1ac56eba55ef658c664236208f88169.tar.bz2 |
tree-optimization/113898 - ICE with sanity checking for VN ref adjustment
The following fixes a missing add to the accumulated offset when
adjusting an ARRAY_REF op for value-ranges applied to by
get_ref_base_and_extent.
PR tree-optimization/113898
* tree-ssa-sccvn.cc (copy_reference_ops_from_ref): Add
missing accumulated off adjustment.
* gcc.dg/torture/pr113898.c: New testcase.
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr113898.c | 16 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.cc | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr113898.c b/gcc/testsuite/gcc.dg/torture/pr113898.c new file mode 100644 index 0000000..6832a34 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr113898.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +int a, d; +unsigned **b; +long c, f; +long e[2][1]; +void g() { + int h = 0; + for (; h < 2; h++) { + e[h][d + **b + a] = c; + if (f) + for (;;) + ; + } +} +void main() {} diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index 2823573..5a49390 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -1126,6 +1126,7 @@ copy_reference_ops_from_ref (tree ref, vec<vn_reference_op_s> *result) op.op0 = wide_int_to_tree (TREE_TYPE (op.op0), wi::to_poly_wide (op.op1) + idx); op.off = idx * elsz; + off += op.off; } else { |