PR middle-end/88273 - [8/9 Regression] warning: 'memcpy' offset [-527, -529]
authorMartin Sebor <msebor@redhat.com>
Thu, 17 Jan 2019 22:52:47 +0000 (22:52 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Thu, 17 Jan 2019 22:52:47 +0000 (15:52 -0700)
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
gcc/gimple-ssa-warn-restrict.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Warray-bounds-38.c [new file with mode: 0644]

index b3649d1e6a6c253f75db53657652b7f06b02a0eb..32b153a8ad6fbe01a2ab183082dfc2894874dd83 100644 (file)
@@ -1,3 +1,9 @@
+2019-01-17  Martin Sebor  <msebor@redhat.com>
+
+       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  <sellcey@cavium.com>
 
        * config/aarch64/aarch64.c (cgraph.h): New include.
index 42c87190dd8cf21a7be52b9fe92c73280a4d0f80..b069f3aebe63bb92df238f8f30607e5766358cce 100644 (file)
@@ -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)
index 84cb714a1487a1088647adc6e32af92287dd6646..790556f169a58dbacf13195f06ddb8424ec23fc3 100644 (file)
@@ -1,3 +1,8 @@
+2019-01-17  Martin Sebor  <msebor@redhat.com>
+
+       PR middle-end/88273
+       * gcc.dg/Warray-bounds-38.c: New test.
+
 2018-01-17  Steve Ellcey  <sellcey@cavium.com>
 
        * 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 (file)
index 0000000..c9aa0eb
--- /dev/null
@@ -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);
+}