Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
------------------------------------------------------------------------ r293043 | dergachev | 2017-01-25 02:21:45 -0800 (Wed, 25 Jan 2017) | 12 lines [analyzer] Fix MacOSXAPIChecker fp with static locals seen from nested blocks. This is an attempt to avoid new false positives caused by the reverted r292800, however the scope of the fix is significantly reduced - some variables are still in incorrect memory spaces. Relevant test cases added. rdar://problem/30105546 rdar://problem/30156693 Differential revision: https://reviews.llvm.org/D28946 ------------------------------------------------------------------------ llvm-svn: 294050
- Loading branch information
Showing
5 changed files
with
56 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} | ||
} |