Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/pr83047.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/pr83047.c Thu Oct 25 07:37:49 2018 +0900 @@ -0,0 +1,58 @@ +/* PR tree-optimization/83047 */ +/* { dg-do run { target mmap } } */ +/* { dg-options "-O2" } */ + +#include <stddef.h> +#include <stdio.h> +#include <sys/mman.h> +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif +#ifndef MAP_ANON +#define MAP_ANON 0 +#endif +#ifndef MAP_FAILED +#define MAP_FAILED ((void *)-1) +#endif +#include <stdlib.h> + +__attribute__((noipa)) void +foo (char *p, char *q, int r) +{ + char a = q[0]; + if (r || a == '\0') + return; + char b = q[1]; + p[0] = a; + p[1] = b; +} + +int +main () +{ + char *p = mmap (NULL, 131072, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED) + return 0; + if (munmap (p + 65536, 65536) < 0) + return 0; + p[0] = 'c'; + p[1] = 'd'; + p[65536 - 2] = 'a'; + p[65536 - 1] = 'b'; + volatile int r = 1; + foo (p, p + 65536 - 2, r); + if (p[0] != 'c' || p[1] != 'd') + abort (); + r = 0; + foo (p, p + 65536 - 2, r); + if (p[0] != 'a' || p[1] != 'b') + abort (); + p[0] = 'e'; + p[1] = 'f'; + r = 1; + foo (p, p + 65536 - 1, r); + if (p[0] != 'e' || p[1] != 'f') + abort (); + return 0; +}