// 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); } } |