annotate gcc/testsuite/c-c++-common/ubsan/ptr-overflow-2.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR sanitizer/80998 */
kono
parents:
diff changeset
2 /* { dg-do run } */
kono
parents:
diff changeset
3 /* { dg-options "-fsanitize=pointer-overflow -fsanitize-recover=pointer-overflow -fno-ipa-icf -Wall" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 __attribute__((noinline, noclone)) char * f1 (char *p) { return p + 1; }
kono
parents:
diff changeset
6 __attribute__((noinline, noclone)) char * f2 (char *p) { return p - 1; }
kono
parents:
diff changeset
7 __attribute__((noinline, noclone)) char * f3 (char *p, int i) { return p + i; }
kono
parents:
diff changeset
8 __attribute__((noinline, noclone)) char * f4 (char *p, int i) { return p + i; }
kono
parents:
diff changeset
9 __attribute__((noinline, noclone)) char * f5 (char *p, int i) { return p - i; }
kono
parents:
diff changeset
10 __attribute__((noinline, noclone)) char * f6 (char *p, int i) { return p - i; }
kono
parents:
diff changeset
11 __attribute__((noinline, noclone)) char * f7 (char *p, unsigned long int i) { return p + i; }
kono
parents:
diff changeset
12 __attribute__((noinline, noclone)) char * f8 (char *p, unsigned long int i) { return p + i; }
kono
parents:
diff changeset
13 __attribute__((noinline, noclone)) char * f9 (char *p, unsigned long int i) { return p - i; }
kono
parents:
diff changeset
14 __attribute__((noinline, noclone)) char * f10 (char *p, unsigned long int i) { return p - i; }
kono
parents:
diff changeset
15 struct S { int a; int b; int c[64]; };
kono
parents:
diff changeset
16 __attribute__((noinline, noclone)) int *f11 (struct S *p) { return &p->a; }
kono
parents:
diff changeset
17 __attribute__((noinline, noclone)) int *f12 (struct S *p) { return &p->b; }
kono
parents:
diff changeset
18 __attribute__((noinline, noclone)) int *f13 (struct S *p) { return &p->c[64]; }
kono
parents:
diff changeset
19 __attribute__((noinline, noclone)) int *f14 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
20 __attribute__((noinline, noclone)) int *f15 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
21 __attribute__((noinline, noclone)) int *f16 (struct S *p) { return &p->a; }
kono
parents:
diff changeset
22 __attribute__((noinline, noclone)) int *f17 (struct S *p) { return &p->b; }
kono
parents:
diff changeset
23 __attribute__((noinline, noclone)) int *f18 (struct S *p) { return &p->c[64]; }
kono
parents:
diff changeset
24 __attribute__((noinline, noclone)) int *f19 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
25 __attribute__((noinline, noclone)) int *f20 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
26 __attribute__((noinline, noclone)) int *f21 (struct S *p) { return &p->a; }
kono
parents:
diff changeset
27 __attribute__((noinline, noclone)) int *f22 (struct S *p) { return &p->b; }
kono
parents:
diff changeset
28 __attribute__((noinline, noclone)) int *f23 (struct S *p) { return &p->c[64]; }
kono
parents:
diff changeset
29 __attribute__((noinline, noclone)) int *f24 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
30 __attribute__((noinline, noclone)) int *f25 (struct S *p, int i) { return &p->c[i]; }
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 char *volatile p;
kono
parents:
diff changeset
33 __UINTPTR_TYPE__ volatile u;
kono
parents:
diff changeset
34 struct S *volatile q;
kono
parents:
diff changeset
35 int *volatile r;
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 int
kono
parents:
diff changeset
38 main ()
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 u = ~(__UINTPTR_TYPE__) 0;
kono
parents:
diff changeset
41 p = (char *) u;
kono
parents:
diff changeset
42 p = f1 (p);
kono
parents:
diff changeset
43 u = 0;
kono
parents:
diff changeset
44 p = (char *) u;
kono
parents:
diff changeset
45 p = f2 (p);
kono
parents:
diff changeset
46 u = -(__UINTPTR_TYPE__) 7;
kono
parents:
diff changeset
47 p = (char *) u;
kono
parents:
diff changeset
48 p = f3 (p, 7);
kono
parents:
diff changeset
49 u = 3;
kono
parents:
diff changeset
50 p = (char *) u;
kono
parents:
diff changeset
51 p = f4 (p, -4);
kono
parents:
diff changeset
52 u = 23;
kono
parents:
diff changeset
53 p = (char *) u;
kono
parents:
diff changeset
54 p = f5 (p, 27);
kono
parents:
diff changeset
55 u = -(__UINTPTR_TYPE__) 15;
kono
parents:
diff changeset
56 p = (char *) u;
kono
parents:
diff changeset
57 p = f6 (p, -15);
kono
parents:
diff changeset
58 u = -(__UINTPTR_TYPE__) 29;
kono
parents:
diff changeset
59 p = (char *) u;
kono
parents:
diff changeset
60 p = f7 (p, 31);
kono
parents:
diff changeset
61 u = 23;
kono
parents:
diff changeset
62 p = (char *) u;
kono
parents:
diff changeset
63 p = f9 (p, 24);
kono
parents:
diff changeset
64 if (sizeof (unsigned long) < sizeof (char *))
kono
parents:
diff changeset
65 return 0;
kono
parents:
diff changeset
66 u = 7;
kono
parents:
diff changeset
67 p = (char *) u;
kono
parents:
diff changeset
68 p = f8 (p, -8);
kono
parents:
diff changeset
69 u = -(__UINTPTR_TYPE__) 25;
kono
parents:
diff changeset
70 p = (char *) u;
kono
parents:
diff changeset
71 p = f10 (p, -25);
kono
parents:
diff changeset
72 u = ~(__UINTPTR_TYPE__) 0;
kono
parents:
diff changeset
73 q = (struct S *) u;
kono
parents:
diff changeset
74 r = f11 (q);
kono
parents:
diff changeset
75 r = f12 (q);
kono
parents:
diff changeset
76 r = f13 (q);
kono
parents:
diff changeset
77 r = f14 (q, 0);
kono
parents:
diff changeset
78 r = f15 (q, 63);
kono
parents:
diff changeset
79 u = ~(__UINTPTR_TYPE__) 0 - (17 * sizeof (int));
kono
parents:
diff changeset
80 q = (struct S *) u;
kono
parents:
diff changeset
81 r = f16 (q);
kono
parents:
diff changeset
82 r = f17 (q);
kono
parents:
diff changeset
83 r = f18 (q);
kono
parents:
diff changeset
84 r = f19 (q, 0);
kono
parents:
diff changeset
85 r = f20 (q, 63);
kono
parents:
diff changeset
86 u = 3 * sizeof (int);
kono
parents:
diff changeset
87 q = (struct S *) u;
kono
parents:
diff changeset
88 r = f21 (q);
kono
parents:
diff changeset
89 r = f22 (q);
kono
parents:
diff changeset
90 r = f23 (q);
kono
parents:
diff changeset
91 r = f24 (q, -2);
kono
parents:
diff changeset
92 r = f25 (q, -6);
kono
parents:
diff changeset
93 return 0;
kono
parents:
diff changeset
94 }
kono
parents:
diff changeset
95
kono
parents:
diff changeset
96 /* { dg-output ":5:6\[79]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
97 /* { dg-output "\[^\n\r]*:6:6\[79]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+ overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
98 /* { dg-output "\[^\n\r]*:7:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+9 overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
99 /* { dg-output "\[^\n\r]*:8:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+3 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
100 /* { dg-output "\[^\n\r]*:9:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+17 overflowed to (0\[xX])?\[fF]\+\[cC](\n|\r\n|\r)" } */
kono
parents:
diff changeset
101 /* { dg-output "\[^\n\r]*:10:7\[46]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+1 overflowed to (0\[xX])?0\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
102 /* { dg-output "\[^\n\r]*:11:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[eE]3 overflowed to (0\[xX])?0\+2(\n|\r\n|\r)" } */
kono
parents:
diff changeset
103 /* { dg-output "\[^\n\r]*:13:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+17 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
104 /* { dg-output "\[^\n\r]*:12:\[89]\[80]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+7 overflowed to (0\[xX])?\[fF]\+(\n|\r\n|\r)" } */
kono
parents:
diff changeset
105 /* { dg-output "\[^\n\r]*:14:\[89]\[91]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[eE]7 overflowed to (0\[xX])?0\+" } */
kono
parents:
diff changeset
106 /* { dg-output "(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
107 /* { dg-output "\[^\n\r]*:17:\[67]\[82]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+3(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
108 /* { dg-output "\[^\n\r]*:18:\[67]\[86]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+107(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
109 /* { dg-output "\[^\n\r]*:19:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+7(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
110 /* { dg-output "\[^\n\r]*:20:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+ overflowed to (0\[xX])?0\+103(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
111 /* { dg-output "\[^\n\r]*:23:\[67]\[86]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[bB]\[bB] overflowed to (0\[xX])?0\+\[cC]3(\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
112 /* { dg-output "\[^\n\r]*:25:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?\[fF]\+\[bB]\[bB] overflowed to (0\[xX])?0\+\[bB]\[fF](\n|\r\n|\r)" { target int32 } } */
kono
parents:
diff changeset
113 /* { dg-output "\[^\n\r]*:30:\[78]\[52]\[^\n\r]*runtime error: pointer index expression with base (0\[xX])?0\+\[cC] overflowed to (0\[xX])?\[fF]\+\[cC]" { target int32 } } */