/* PR tree-optimization/69760 */ /* { dg-do run { target { { *-*-linux* *-*-gnu* *-*-uclinux* } && mmap } } } */ #include #include __attribute__((noinline, noclone)) static void test_func (double *a, int L, int m, int n, int N) { int i, k; for (i = 0; i < N; i++) { k = i - m; if (k >= 0 && k < n) a[L * k] = 0.0; } } int main () { char *p; int L, m, n, N; long l; L = 10000000; n = 4; N = 100 * n; long pgsz = sysconf(_SC_PAGESIZE); if (pgsz < sizeof (double) || pgsz > L * sizeof (double)) return 0; p = mmap ((void *) 0, L * n * sizeof (double), PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (p == MAP_FAILED) return 0; if (mprotect (p, pgsz, PROT_READ | PROT_WRITE)) return 0; l = (L * sizeof (double)) / pgsz * pgsz; if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE)) return 0; l = (2 * L * sizeof (double)) / pgsz * pgsz; if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE)) return 0; l = (3 * L * sizeof (double)) / pgsz * pgsz; if (mprotect (p + l, pgsz, PROT_READ | PROT_WRITE)) return 0; for (m = 0; m < N; m += n) test_func ((double *) p, L, m, n, N); return 0; }