summaryrefslogtreecommitdiff
path: root/test/ubsan/TestCases/Pointer/index-overflow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/ubsan/TestCases/Pointer/index-overflow.cpp')
-rw-r--r--test/ubsan/TestCases/Pointer/index-overflow.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/test/ubsan/TestCases/Pointer/index-overflow.cpp b/test/ubsan/TestCases/Pointer/index-overflow.cpp
index f9b1fea08..0c082ddd4 100644
--- a/test/ubsan/TestCases/Pointer/index-overflow.cpp
+++ b/test/ubsan/TestCases/Pointer/index-overflow.cpp
@@ -1,7 +1,9 @@
// RUN: %clangxx -fsanitize=pointer-overflow %s -o %t
-// RUN: %run %t 1 2>&1 | FileCheck %s --check-prefix=ERR
-// RUN: %run %t 0 2>&1 | FileCheck %s --check-prefix=SAFE
-// RUN: %run %t -1 2>&1 | FileCheck %s --check-prefix=SAFE
+// RUN: %run %t 2 2>&1 | FileCheck %s --implicit-check-not="error:" --check-prefix=ERR2
+// RUN: %run %t 1 2>&1 | FileCheck %s --implicit-check-not="error:" --check-prefix=ERR1
+// RUN: %run %t 0 2>&1 | FileCheck %s --implicit-check-not="error:" --check-prefix=SAFE
+// RUN: %run %t -1 2>&1 | FileCheck %s --implicit-check-not="error:" --check-prefix=SAFE
+// RUN: %run %t -2 2>&1 | FileCheck %s --implicit-check-not="error:" --check-prefix=SAFE
#include <stdio.h>
#include <stdint.h>
@@ -9,11 +11,18 @@
int main(int argc, char *argv[]) {
// SAFE-NOT: runtime error
- // ERR: runtime error: pointer index expression with base {{.*}} overflowed to
+ // ERR2: runtime error: pointer index expression with base {{.*}} overflowed to
+ // ERR2: runtime error: pointer index expression with base {{.*}} overflowed to
+ // ERR1: runtime error: applying non-zero offset to non-null pointer 0x{{.*}} produced null pointer
+ // ERR1: runtime error: applying non-zero offset to non-null pointer 0x{{.*}} produced null pointer
char *p = (char *)(UINTPTR_MAX);
printf("%p\n", p + atoi(argv[1]));
+ char *q = (char *)(UINTPTR_MAX);
+
+ printf("%p\n", p - (-atoi(argv[1])));
+
return 0;
}