From 77efc5c25c487ce50ff94bdee7494c6a87fda4f1 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Thu, 17 Jan 2019 22:52:47 +0000 Subject: [PATCH] PR middle-end/88273 - [8/9 Regression] warning: 'memcpy' offset [-527, -529] PR middle-end/88273 - [8/9 Regression] warning: 'memcpy' offset [-527, -529] is out of the bounds [0, 16] gcc/ChangeLog: PR middle-end/88273 * gimple-ssa-warn-restrict.c (builtin_memref::extend_offset_range): Handle anti-ranges the same as no range at all. gcc/testsuite/ChangeLog: PR middle-end/88273 * gcc.dg/Warray-bounds-38.c: New test. From-SVN: r268048 --- gcc/ChangeLog | 6 +++++ gcc/gimple-ssa-warn-restrict.c | 6 +---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/Warray-bounds-38.c | 30 +++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Warray-bounds-38.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3649d1e6a6..32b153a8ad6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-01-17 Martin Sebor + + PR middle-end/88273 + * gimple-ssa-warn-restrict.c (builtin_memref::extend_offset_range): + Handle anti-ranges the same as no range at all. + 2018-01-17 Steve Ellcey * config/aarch64/aarch64.c (cgraph.h): New include. diff --git a/gcc/gimple-ssa-warn-restrict.c b/gcc/gimple-ssa-warn-restrict.c index 42c87190dd8..b069f3aebe6 100644 --- a/gcc/gimple-ssa-warn-restrict.c +++ b/gcc/gimple-ssa-warn-restrict.c @@ -319,13 +319,9 @@ builtin_memref::extend_offset_range (tree offset) offrange[0] += offset_int::from (min, SIGNED); offrange[1] += offset_int::from (max, SIGNED); } - else if (rng == VR_ANTI_RANGE) - { - offrange[0] += offset_int::from (max + 1, SIGNED); - offrange[1] += offset_int::from (min - 1, SIGNED); - } else { + /* Handle an anti-range the same as no range at all. */ gimple *stmt = SSA_NAME_DEF_STMT (offset); tree type; if (is_gimple_assign (stmt) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 84cb714a148..790556f169a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-17 Martin Sebor + + PR middle-end/88273 + * gcc.dg/Warray-bounds-38.c: New test. + 2018-01-17 Steve Ellcey * c-c++-common/gomp/pr60823-1.c: Add aarch64 specific diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-38.c b/gcc/testsuite/gcc.dg/Warray-bounds-38.c new file mode 100644 index 00000000000..c9aa0eb8175 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Warray-bounds-38.c @@ -0,0 +1,30 @@ +/* PR middle-end/88273 - bogus warning: 'memcpy' offset [-527, -529] + is out of the bounds [0, 16] + { dg-do compile } + { dg-options "-O2 -Wall" } */ + +typedef __SIZE_TYPE__ size_t; + +void *q; + +size_t x, y; + +inline void f (char *p, int i, size_t j) +{ + size_t n = y ? y : j; + + p += x - i; + + __builtin_memcpy (q, p, n); /* { dg-bogus "bounds" } */ + + x = n; +} + +void g (void) +{ + struct { char a[16]; } s; + + f (q, 0, sizeof s); + + f (s.a, 33 * sizeof s, 1); +} -- 2.30.2