1 | // RUN: %clang -x c -fsanitize=pointer-overflow %s -o %t |
2 | // RUN: %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-NOTYPE,CHECK-NOTYPE-C |
3 | // RUN: %env_ubsan_opts=report_error_type=1 %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-TYPE,CHECK-TYPE-C |
4 | |
5 | // RUN: %clangxx -fsanitize=pointer-overflow %s -o %t |
6 | // RUN: %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-NOTYPE,CHECK-NOTYPE-CPP |
7 | // RUN: %env_ubsan_opts=report_error_type=1 %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-TYPE,CHECK-TYPE-CPP |
8 | |
9 | #include <stdlib.h> |
10 | |
11 | int main(int argc, char *argv[]) { |
12 | char *base, *result; |
13 | |
14 | base = (char *)0; |
15 | result = base + 0; |
16 | // CHECK-NOTYPE-C: SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior {{.*}}summary.cpp:[[@LINE-1]]:17 |
17 | // CHECK-TYPE-C: SUMMARY: UndefinedBehaviorSanitizer: nullptr-with-offset {{.*}}summary.cpp:[[@LINE-2]]:17 |
18 | // CHECK-NOTYPE-CPP-NOT: SUMMARY: |
19 | // CHECK-TYPE-CPP-NOT: SUMMARY: |
20 | |
21 | base = (char *)0; |
22 | result = base + 1; |
23 | // CHECK-NOTYPE: SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior {{.*}}summary.cpp:[[@LINE-1]]:17 |
24 | // CHECK-TYPE: SUMMARY: UndefinedBehaviorSanitizer: nullptr-with-nonzero-offset {{.*}}summary.cpp:[[@LINE-2]]:17 |
25 | |
26 | base = (char *)1; |
27 | result = base - 1; |
28 | // CHECK-NOTYPE: SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior {{.*}}summary.cpp:[[@LINE-1]]:17 |
29 | // CHECK-TYPE: SUMMARY: UndefinedBehaviorSanitizer: nullptr-after-nonzero-offset {{.*}}summary.cpp:[[@LINE-2]]:17 |
30 | |
31 | return 0; |
32 | } |
33 | |