aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-11-21 02:17:47 +0000
committerTed Kremenek <kremenek@apple.com>2009-11-21 02:17:47 +0000
commit8ea06e95c396aa56a24cc9325d7ac6b27422adcf (patch)
tree47c3859503720d322c6b9f7ed1c20adb6e0bb274
parent98440b4ac17dc5f85ea3db683c1c1785449c17e1 (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.m23
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;
+ }
+}
+
+