From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 143023858283; Tue, 13 Feb 2024 10:45:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 143023858283 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1707821149; bh=X73qDgezMZg1BOuFsn5oYehwSRHuv9USWEfY6B70CHA=; h=From:To:Subject:Date:From; b=ZzCadLiGlp4iLJ1FqoD7lZJhOgiyqvpnYTYNUxtgf0QD1PvXu4VN7WyHU5X0GDiKD 0Y7Ok/7sKboUtJ01lfudbERcjxuZ6baHBVUUFL+1i+XfgUc70V7J1fJou7fOgYe0Jt g7sbxTCUBHwXu79tZCphkWDpFEugKhaHGYiuHSvY= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-8950] tree-optimization/113898 - ICE with sanity checking for VN ref adjustment X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 2ca373b7e8adf9cc0c17aecab5e1cc6c76a92f4c X-Git-Newrev: af6d8d0cc1ac56eba55ef658c664236208f88169 Message-Id: <20240213104549.143023858283@sourceware.org> Date: Tue, 13 Feb 2024 10:45:49 +0000 (GMT) List-Id: https://gcc.gnu.org/g:af6d8d0cc1ac56eba55ef658c664236208f88169 commit r14-8950-gaf6d8d0cc1ac56eba55ef658c664236208f88169 Author: Richard Biener Date: Tue Feb 13 10:04:31 2024 +0100 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. Diff: --- gcc/testsuite/gcc.dg/torture/pr113898.c | 16 ++++++++++++++++ gcc/tree-ssa-sccvn.cc | 1 + 2 files changed, 17 insertions(+) diff --git a/gcc/testsuite/gcc.dg/torture/pr113898.c b/gcc/testsuite/gcc.dg/torture/pr113898.c new file mode 100644 index 000000000000..6832a3452718 --- /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 2823573b656e..5a49390a79cb 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 *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 {