diff options
author | Anna Zaks <ganna@apple.com> | 2015-10-27 20:19:45 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2015-10-27 20:19:45 +0000 |
commit | fe1eca516988c2e79378e833b1cbde1a2907d042 (patch) | |
tree | fb8fb86c4889a5d386b2f008308b6fbcd7fd10e4 /clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | |
parent | ac98dbc33ba4d510700b4235cb4007ed94247515 (diff) | |
download | bcm5719-llvm-fe1eca516988c2e79378e833b1cbde1a2907d042.tar.gz bcm5719-llvm-fe1eca516988c2e79378e833b1cbde1a2907d042.zip |
[analyzer] Assume escape is possible through system functions taking void*
The analyzer assumes that system functions will not free memory or modify the
arguments in other ways, so we assume that arguments do not escape when
those are called. However, this may lead to false positive leak errors. For
example, in code like this where the pointers added to the rb_tree are freed
later on:
struct alarm_event *e = calloc(1, sizeof(*e));
<snip>
rb_tree_insert_node(&alarm_tree, e);
Add a heuristic to assume that calls to system functions taking void*
arguments allow for pointer escape.
llvm-svn: 251449
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index f924a767789..54b1a6ee0fd 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -2390,7 +2390,7 @@ bool MallocChecker::mayFreeAnyEscapedMemoryOrIsModeledExplicitly( if (const ObjCMethodCall *Msg = dyn_cast<ObjCMethodCall>(Call)) { // If it's not a framework call, or if it takes a callback, assume it // can free memory. - if (!Call->isInSystemHeader() || Call->hasNonZeroCallbackArg()) + if (!Call->isInSystemHeader() || Call->argumentsMayEscape()) return true; // If it's a method we know about, handle it explicitly post-call. |