summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2015-09-18 19:13:22 +0000
committerGabor Horvath <xazax.hun@gmail.com>2015-09-18 19:13:22 +0000
commitc4b28a8f741918b10b0a7211ccba288658e8e043 (patch)
treea7bd41bbcbcf9ddd4654d6beccd7db6dff9c86c5 /clang/test
parente72b0dbf978281bf5485da7446764250349f8972 (diff)
downloadbcm5719-llvm-c4b28a8f741918b10b0a7211ccba288658e8e043.tar.gz
bcm5719-llvm-c4b28a8f741918b10b0a7211ccba288658e8e043.zip
[analyzer] A fix for substraction of an integer from a pointer.
Patch by Artem Dergachev! Differential Revision: http://reviews.llvm.org/D12725 llvm-svn: 248021
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/ptr-arith.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/Analysis/ptr-arith.c b/clang/test/Analysis/ptr-arith.c
index 96dc8bacbce..57463cc7c87 100644
--- a/clang/test/Analysis/ptr-arith.c
+++ b/clang/test/Analysis/ptr-arith.c
@@ -296,3 +296,20 @@ void symbolicFieldRegion(struct Point *points, int i, int j) {
clang_analyzer_eval(&points[i].x < &points[i].y);// expected-warning{{TRUE}}
}
+void negativeIndex(char *str) {
+ *(str + 1) = 'a';
+ clang_analyzer_eval(*(str + 1) == 'a'); // expected-warning{{TRUE}}
+ clang_analyzer_eval(*(str - 1) == 'a'); // expected-warning{{UNKNOWN}}
+
+ char *ptr1 = str - 1;
+ clang_analyzer_eval(*ptr1 == 'a'); // expected-warning{{UNKNOWN}}
+
+ char *ptr2 = str;
+ ptr2 -= 1;
+ clang_analyzer_eval(*ptr2 == 'a'); // expected-warning{{UNKNOWN}}
+
+ char *ptr3 = str;
+ --ptr3;
+ clang_analyzer_eval(*ptr3 == 'a'); // expected-warning{{UNKNOWN}}
+}
+
OpenPOWER on IntegriCloud