Mercurial > hg > CbC > CbC_gcc
view 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 |
line wrap: on
line source
/* { dg-options "-O -fsanitize=pointer-overflow -fdump-tree-optimized" } */ /* { dg-skip-if "" { *-*-* } "-flto" } */ #define SMAX __PTRDIFF_MAX__ void foo(void) { char *p; char *p2; char b[1]; char c[1]; p = b + SMAX; /* pointer overflow check is needed */ p = b; p++; p2 = p + 1000; p2 = p + 999; p = b + SMAX; p2 = p + 1; /* pointer overflow check is needed */ p = b; p--; /* pointer overflow check is needed */ p2 = p + 1; p2 = p + 2; p = b - SMAX; /* pointer overflow check is needed */ p2 = p + (SMAX - 2); /* b - 2: no need to check this */ p2 = p + (SMAX - 1); /* b - 1: no need to check this */ p2 = p + SMAX; /* b: no need to check this */ p2++; /* b + 1 */ p = c; p++; /* c + 1 */ p = c - SMAX; /* pointer overflow check is needed */ p2 = p + SMAX; /* c: pointer overflow check is needed */ p2++; /* c + 1 */ } void bar(char *ptr) { char *p = ptr - 1000; /* pointer overflow check is needed */ p = ptr + 1000; /* pointer overflow check is needed */ p -= 2000; /* pointer overflow check is needed */ } void baz(char *ptr) { char **p = &ptr; char **p2 = p + 20; /* pointer overflow check is needed */ p2--; } void positive_and_positive (char *ptr) { char **p = &ptr; char **p2 = p + 100; /* pointer overflow check is needed */ p2 = p + 10; p += 50; } void negative_to_positive (char *ptr) { char **p = &ptr; char **p2 = p + 20; /* pointer overflow check is needed */ p2 = p - 10; /* pointer overflow check is needed */ p2 += 15; } void negative_to_negative (char *ptr) { char **p = &ptr; char **p2 = p - 20; /* pointer overflow check is needed */ p2 = p - 20; p2 += 5; } /* { dg-final { scan-tree-dump-times "__ubsan_handle_pointer_overflow" 14 "optimized" } } */