36 lines
913 B
Mathematica
36 lines
913 B
Mathematica
|
// 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);
|
||
|
}
|
||
|
}
|