1 /* { dg-options "-O -fsanitize=pointer-overflow -fdump-tree-optimized" } */
2 /* { dg-skip-if "" { *-*-* } "-flto" } */
4 #define SMAX __PTRDIFF_MAX__
13 p
= b
+ SMAX
; /* pointer overflow check is needed */
20 p2
= p
+ 1; /* pointer overflow check is needed */
23 p
--; /* pointer overflow check is needed */
27 p
= b
- SMAX
; /* pointer overflow check is needed */
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 */
35 p
= c
- SMAX
; /* pointer overflow check is needed */
36 p2
= p
+ SMAX
; /* c: pointer overflow check is needed */
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 */
50 char **p2
= p
+ 20; /* pointer overflow check is needed */
54 void positive_and_positive (char *ptr
)
57 char **p2
= p
+ 100; /* pointer overflow check is needed */
62 void negative_to_positive (char *ptr
)
65 char **p2
= p
+ 20; /* pointer overflow check is needed */
66 p2
= p
- 10; /* pointer overflow check is needed */
70 void negative_to_negative (char *ptr
)
73 char **p2
= p
- 20; /* pointer overflow check is needed */
78 /* { dg-final { scan-tree-dump-times "__ubsan_handle_pointer_overflow" 14 "optimized" } } */