]> granicus.if.org Git - clang/commit
[analyzer] ObjCSelfInitChecker should always clean up in postCall checks.
authorJordan Rose <jordan_rose@apple.com>
Sat, 8 Sep 2012 01:47:28 +0000 (01:47 +0000)
committerJordan Rose <jordan_rose@apple.com>
Sat, 8 Sep 2012 01:47:28 +0000 (01:47 +0000)
commit82f2ad456a82da1b9cb7ddfc994c8f5fa44b59e6
tree3b17266037a3fc4a8d92b72ec51cd910a6405311
parenta435e6989de2c668c5c512dda48e6f8756e0ba2c
[analyzer] ObjCSelfInitChecker should always clean up in postCall checks.

ObjCSelfInitChecker stashes information in the GDM to persist it across
function calls; it is stored in pre-call checks and retrieved post-call.
The post-call check is supposed to clear out the stored state, but was
failing to do so in cases where the call did not have a symbolic return
value.

This was actually causing the inappropriate cache-out from r163361.
Per discussion with Anna, we should never actually cache out when
assuming the receiver of an Objective-C message is non-nil, because
we guarded that node generation by checking that the state has changed.
Therefore, the only states that could reach this exact ExplodedNode are
ones that should have merged /before/ making this assumption.

r163361 has been reverted and the test case removed, since it won't
actually test anything interesting now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163449 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp
lib/StaticAnalyzer/Core/ExprEngineObjC.cpp
test/Analysis/retain-release-crashes.m [deleted file]