annotate gcc/testsuite/c-c++-common/Wrestrict-3.c @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +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 c/83989 */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 /* { dg-do compile } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* { dg-options "-O2 -Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 __attribute__((__malloc__)) extern void *my_malloc (__SIZE_TYPE__);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 void baz (void *);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define SIZE 32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 foo (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 void *recmem = __builtin_malloc (SIZE);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 baz (recmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 while (1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 void *oldrecmem = recmem;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 recmem = __builtin_malloc (SIZE);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 if (!recmem)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 __builtin_free (oldrecmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 baz (recmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 __builtin_free (oldrecmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 }
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 void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 bar (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 void *recmem = my_malloc (SIZE);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 baz (recmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 while (1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 void *oldrecmem = recmem;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 recmem = my_malloc (SIZE);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 if (!recmem)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 __builtin_free (oldrecmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 return;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 baz (recmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 __builtin_free (oldrecmem);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 }