aboutsummaryrefslogtreecommitdiff
path: root/lib/Index/DeclReferenceMap.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-03-09 00:59:10 +0000
committerJordan Rose <jordan_rose@apple.com>2013-03-09 00:59:10 +0000
commit9fe09f30f76cb65ca2a5fcd8e649f5b2f0cf02bd (patch)
tree85dc583de1428eb7355be7e093af0498744b038b /lib/Index/DeclReferenceMap.cpp
parent41d016454b48f25c93d4b3fb84cfc7e426a9bd73 (diff)
[analyzer] Be more consistent about Objective-C methods that free memory.
Previously, MallocChecker's pointer escape check and its post-call state update for Objective-C method calls had a fair amount duplicated logic and not-entirely-consistent checks. This commit restructures all this to be more consistent and possibly allow us to be more aggressive in warning about double-frees. New policy (applies to system header methods only): (1) If this is a method we know about, model it as taking/holding ownership of the passed-in buffer. (1a) ...unless there's a "freeWhenDone:" parameter with a zero (NO) value. (2) If there's a "freeWhenDone:" parameter (but it's not a method we know about), treat the buffer as escaping if the value is non-zero (YES) and non-escaping if it's zero (NO). (3) If the first selector piece ends with "NoCopy" (but it's not a method we know about and there's no "freeWhenDone:" parameter), treat the buffer as escaping. The reason that (2) and (3) don't explicitly model the ownership transfer is because we can't be sure that they will actually free the memory using free(), and we wouldn't want to emit a spurious "mismatched allocator" warning (coming in Anton's upcoming patch). In the future, we may have an idea of a "generic deallocation", i.e. we assume that the deallocator is correct but still continue tracking the region so that we can warn about double-frees. Patch by Anton Yartsev, with modifications from me. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176744 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Index/DeclReferenceMap.cpp')
0 files changed, 0 insertions, 0 deletions