aboutsummaryrefslogtreecommitdiffstats
path: root/test/Analysis/null-deref-static.m
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-02-05 19:37:40 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-02-05 19:37:40 +0000
commitb3090384227bf61f889b6aaf4230eccaacc85514 (patch)
tree6d36474d5d489e49c094ba806b8b9a65309592bc /test/Analysis/null-deref-static.m
parent123063377428540752bad91c7fbd536a762e31bd (diff)
downloadsrc-b3090384227bf61f889b6aaf4230eccaacc85514.tar.gz
src-b3090384227bf61f889b6aaf4230eccaacc85514.zip
Vendor import of clang release_40 branch r294123:vendor/clang/clang-release_40-r294123
Notes
Notes: svn path=/vendor/clang/dist/; revision=313291 svn path=/vendor/clang/clang-release_40-r294123/; revision=313292; tag=vendor/clang/clang-release_40-r294123
Diffstat (limited to 'test/Analysis/null-deref-static.m')
-rw-r--r--test/Analysis/null-deref-static.m35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Analysis/null-deref-static.m b/test/Analysis/null-deref-static.m
new file mode 100644
index 000000000000..887bea252390
--- /dev/null
+++ b/test/Analysis/null-deref-static.m
@@ -0,0 +1,35 @@
+// RUN: %clang_cc1 -w -fblocks -analyze -analyzer-checker=core,deadcode,alpha.core,debug.ExprInspection -verify %s
+
+void *malloc(unsigned long);
+void clang_analyzer_warnIfReached();
+
+void test_static_from_block() {
+ static int *x;
+ ^{
+ *x; // no-warning
+ };
+}
+
+void test_static_within_block() {
+ ^{
+ static int *x;
+ *x; // expected-warning{{Dereference of null pointer}}
+ };
+}
+
+void test_static_control_flow(int y) {
+ static int *x;
+ if (x) {
+ // FIXME: Should be reachable.
+ clang_analyzer_warnIfReached(); // no-warning
+ }
+ if (y) {
+ // We are not sure if this branch is possible, because the developer
+ // may argue that function is always called with y == 1 for the first time.
+ // In this case, we can only advise the developer to add assertions
+ // for suppressing such path.
+ *x; // expected-warning{{Dereference of null pointer}}
+ } else {
+ x = malloc(1);
+ }
+}