diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-11-21 02:17:47 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-11-21 02:17:47 +0000 |
commit | 8ea06e95c396aa56a24cc9325d7ac6b27422adcf (patch) | |
tree | 47c3859503720d322c6b9f7ed1c20adb6e0bb274 | |
parent | 98440b4ac17dc5f85ea3db683c1c1785449c17e1 (diff) |
Add another test case to show the precision of RegionStore over
BasicStore. In this example, BasicStore would lose information about
the pointer in path after '*path++', causing the analyzer to falsely
flag a null dereference. This addresses <rdar://problem/7191542>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89533 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/Analysis/misc-ps-region-store.m | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Analysis/misc-ps-region-store.m b/test/Analysis/misc-ps-region-store.m index 23199b6361..fe45823fe4 100644 --- a/test/Analysis/misc-ps-region-store.m +++ b/test/Analysis/misc-ps-region-store.m @@ -509,3 +509,26 @@ void rdar7403269_b_pos() { *p = 0xDEADBEEF; // expected-warning{{Dereference of null pointer}} } + +//===----------------------------------------------------------------------===// +// Test that incrementing a non-null pointer results in a non-null pointer. +// (<rdar://problem/7191542>) +//===----------------------------------------------------------------------===// + +void test_increment_nonnull_rdar_7191542(const char *path) { + const char *alf = 0; + + for (;;) { + // When using basic-store, we get a null dereference here because we lose information + // about path after the pointer increment. + char c = *path++; // no-warning + if (c == 'a') { + alf = path; + } + + if (alf) + return; + } +} + + |