diff options
Diffstat (limited to 'test/Analysis/null-deref-static.m')
-rw-r--r-- | test/Analysis/null-deref-static.m | 35 |
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); + } +} |