diff options
| author | Gabor Horvath <xazax.hun@gmail.com> | 2015-09-18 19:13:22 +0000 |
|---|---|---|
| committer | Gabor Horvath <xazax.hun@gmail.com> | 2015-09-18 19:13:22 +0000 |
| commit | c4b28a8f741918b10b0a7211ccba288658e8e043 (patch) | |
| tree | a7bd41bbcbcf9ddd4654d6beccd7db6dff9c86c5 /clang/test | |
| parent | e72b0dbf978281bf5485da7446764250349f8972 (diff) | |
| download | bcm5719-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.c | 17 |
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}} +} + |

