annotate gcc/testsuite/c-c++-common/ubsan/ptr-overflow-sanitization-1.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-options "-O -fsanitize=pointer-overflow -fdump-tree-optimized" } */
kono
parents:
diff changeset
2 /* { dg-skip-if "" { *-*-* } "-flto" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #define SMAX __PTRDIFF_MAX__
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 void foo(void)
kono
parents:
diff changeset
7 {
kono
parents:
diff changeset
8 char *p;
kono
parents:
diff changeset
9 char *p2;
kono
parents:
diff changeset
10 char b[1];
kono
parents:
diff changeset
11 char c[1];
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 p = b + SMAX; /* pointer overflow check is needed */
kono
parents:
diff changeset
14 p = b;
kono
parents:
diff changeset
15 p++;
kono
parents:
diff changeset
16 p2 = p + 1000;
kono
parents:
diff changeset
17 p2 = p + 999;
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 p = b + SMAX;
kono
parents:
diff changeset
20 p2 = p + 1; /* pointer overflow check is needed */
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 p = b;
kono
parents:
diff changeset
23 p--; /* pointer overflow check is needed */
kono
parents:
diff changeset
24 p2 = p + 1;
kono
parents:
diff changeset
25 p2 = p + 2;
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 p = b - SMAX; /* pointer overflow check is needed */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 p2 = p + (SMAX - 2); /* b - 2: no need to check this */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
29 p2 = p + (SMAX - 1); /* b - 1: no need to check this */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30 p2 = p + SMAX; /* b: no need to check this */
111
kono
parents:
diff changeset
31 p2++; /* b + 1 */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 p = c;
kono
parents:
diff changeset
34 p++; /* c + 1 */
kono
parents:
diff changeset
35 p = c - SMAX; /* pointer overflow check is needed */
kono
parents:
diff changeset
36 p2 = p + SMAX; /* c: pointer overflow check is needed */
kono
parents:
diff changeset
37 p2++; /* c + 1 */
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 void bar(char *ptr)
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42 char *p = ptr - 1000; /* pointer overflow check is needed */
kono
parents:
diff changeset
43 p = ptr + 1000; /* pointer overflow check is needed */
kono
parents:
diff changeset
44 p -= 2000; /* pointer overflow check is needed */
kono
parents:
diff changeset
45 }
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 void baz(char *ptr)
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 char **p = &ptr;
kono
parents:
diff changeset
50 char **p2 = p + 20; /* pointer overflow check is needed */
kono
parents:
diff changeset
51 p2--;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 void positive_and_positive (char *ptr)
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 char **p = &ptr;
kono
parents:
diff changeset
57 char **p2 = p + 100; /* pointer overflow check is needed */
kono
parents:
diff changeset
58 p2 = p + 10;
kono
parents:
diff changeset
59 p += 50;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 void negative_to_positive (char *ptr)
kono
parents:
diff changeset
63 {
kono
parents:
diff changeset
64 char **p = &ptr;
kono
parents:
diff changeset
65 char **p2 = p + 20; /* pointer overflow check is needed */
kono
parents:
diff changeset
66 p2 = p - 10; /* pointer overflow check is needed */
kono
parents:
diff changeset
67 p2 += 15;
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 void negative_to_negative (char *ptr)
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 char **p = &ptr;
kono
parents:
diff changeset
73 char **p2 = p - 20; /* pointer overflow check is needed */
kono
parents:
diff changeset
74 p2 = p - 20;
kono
parents:
diff changeset
75 p2 += 5;
kono
parents:
diff changeset
76 }
kono
parents:
diff changeset
77
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 /* { dg-final { scan-tree-dump-times "__ubsan_handle_pointer_overflow" 14 "optimized" } } */