Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/pr83047.c @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
/* 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; }