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