PR middle-end/63477 - Bogus warning with -O3 -Warray-bounds: array subscript
authorMartin Sebor <msebor@redhat.com>
Thu, 16 Nov 2017 16:48:36 +0000 (16:48 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Thu, 16 Nov 2017 16:48:36 +0000 (09:48 -0700)
PR middle-end/63477 - Bogus warning with -O3 -Warray-bounds: array subscript
is above array bounds

gcc/testsuite/ChangeLog:

PR middle-end/63477
* gcc.dg/pr63477.c: New test.

From-SVN: r254833

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr63477.c [new file with mode: 0644]

index 30082bf182183735b8ba845efdcd1975ada4c639..a932323e5d36a336d5075d1bffed2e185a4a17f6 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-16  Martin Sebor  <msebor@redhat.com>
+
+       PR middle-end/63477
+       * gcc.dg/pr63477.c: New test.
+
 2017-11-16  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/82588
diff --git a/gcc/testsuite/gcc.dg/pr63477.c b/gcc/testsuite/gcc.dg/pr63477.c
new file mode 100644 (file)
index 0000000..8fb2f26
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR middle-end/63477 - Bogus warning with -O3 -Warray-bounds: array
+   subscript is above array bounds
+   { dg-do compile }
+   { dg-options "-O3 -Warray-bounds" }  */
+
+#define MAX_VAL 16
+
+typedef struct
+{
+  int itemList[MAX_VAL + 1];
+  unsigned int numItems;
+} ItemList;
+
+void FrobList (ItemList *l)
+{
+  unsigned int i;
+
+  for (i = 0; i < l->numItems - 1; i++)
+    {
+      int minVal = l->itemList[i];
+
+      unsigned int minIdx = i;
+      unsigned int idx;
+
+      for (idx = i + 1; idx < l->numItems; ++idx) {
+
+       if (l->itemList[idx] < minVal)  /* { dg-bogus "\\\[-Warray-bounds]" } */
+         {
+           minVal = l->itemList[idx];
+           minIdx = idx;
+         }
+      }
+
+      l->itemList[i] = l->itemList[minIdx];
+    }
+}