annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR tree-optimization/83047 */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 /* { dg-do run { target mmap } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* { dg-options "-O2" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 #include <stddef.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 #include <stdio.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 #include <sys/mman.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #ifndef MAP_ANONYMOUS
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define MAP_ANONYMOUS MAP_ANON
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 #ifndef MAP_ANON
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 #define MAP_ANON 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 #ifndef MAP_FAILED
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 #define MAP_FAILED ((void *)-1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 #include <stdlib.h>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 __attribute__((noipa)) void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 foo (char *p, char *q, int r)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 char a = q[0];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 if (r || a == '\0')
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 char b = q[1];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 p[0] = a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 p[1] = b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 char *p = mmap (NULL, 131072, PROT_READ | PROT_WRITE,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 if (p == MAP_FAILED)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 if (munmap (p + 65536, 65536) < 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 p[0] = 'c';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 p[1] = 'd';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 p[65536 - 2] = 'a';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 p[65536 - 1] = 'b';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 volatile int r = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 foo (p, p + 65536 - 2, r);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 if (p[0] != 'c' || p[1] != 'd')
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 r = 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 foo (p, p + 65536 - 2, r);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 if (p[0] != 'a' || p[1] != 'b')
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 p[0] = 'e';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 p[1] = 'f';
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 r = 1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 foo (p, p + 65536 - 1, r);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 if (p[0] != 'e' || p[1] != 'f')
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 }