summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/Verifier.cpp
diff options
context:
space:
mode:
authorDevin Coughlin <dcoughlin@apple.com>2016-02-29 21:44:08 +0000
committerDevin Coughlin <dcoughlin@apple.com>2016-02-29 21:44:08 +0000
commit3fc67e47e53b1d81dbefa92bba98b35d26581d77 (patch)
tree741f7c981c558506d40abe539f63a7d828e2e246 /llvm/lib/IR/Verifier.cpp
parentfe09d5e73a95cdd998258f4b759a22f429b86d7c (diff)
downloadbcm5719-llvm-3fc67e47e53b1d81dbefa92bba98b35d26581d77.tar.gz
bcm5719-llvm-3fc67e47e53b1d81dbefa92bba98b35d26581d77.zip
[analyzer] Don't treat calls to system headers as escaping in CheckObjCDealloc.
This prevents false negatives when a -dealloc method, for example, removes itself as as an observer with [[NSNotificationCenter defaultCenter] removeObserver:self]. It is unlikely that passing 'self' to a system header method will release 'self''s instance variables, so this is unlikely to produce false positives. A challenge here is that while CheckObjCDealloc no longer treats these calls as escaping, the rest of the analyzer still does. In particular, this means that loads from the same instance variable before and after a call to a system header will result in different symbols being loaded by the region store. To account for this, the checker now treats different ivar symbols with the same instance and ivar decl as the same for the purpose of release checking and more eagerly removes a release requirement when an instance variable is assumed to be nil. This was not needed before because when an ivar escaped its release requirement was always removed -- now the requirement is not removed for calls to system headers. llvm-svn: 262261
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud