/* PR tree-optimization/86196 - Bogus -Wrestrict on memcpy between array elements at unequal indices { dg-do compile } { dg-options "-O2 -Wall" } */ typedef __SIZE_TYPE__ size_t; extern void* memcpy (void*, const void*, size_t); struct S { int n; void * p; }; /* Test case submitted in the PR. */ void pr86196_c0 (struct S * a, size_t n) { for (size_t i = 0, j = 0; i != n; ++i) { if (a[i].n == 0) { if (i != j) memcpy (&a[j], &a[i], sizeof (struct S)); /* { dg-bogus "\\\[-Wrestrict" } */ ++j; } } } /* Reduced test case. */ void pr86196_c1 (struct S *a, int i, int j) { if (i != j) memcpy (&a[j], &a[i], sizeof (struct S)); /* { dg-bogus "\\\[-Wrestrict" } */ }