зеркало из https://github.com/microsoft/clang-1.git
[analyzer] RetainRelease: Self assignment should not suppress a leak
warning. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155966 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
12f3297fbe
Коммит
e7958da55e
|
@ -3347,7 +3347,11 @@ void RetainCountChecker::checkBind(SVal loc, SVal val, const Stmt *S,
|
|||
// To test (3), generate a new state with the binding added. If it is
|
||||
// the same state, then it escapes (since the store cannot represent
|
||||
// the binding).
|
||||
escapes = (state == (state->bindLoc(*regionLoc, val)));
|
||||
// Do this only if we know that the store is not supposed to generate the
|
||||
// same state.
|
||||
SVal StoredVal = state->getSVal(regionLoc->getRegion());
|
||||
if (StoredVal != val)
|
||||
escapes = (state == (state->bindLoc(*regionLoc, val)));
|
||||
}
|
||||
if (!escapes) {
|
||||
// Case 4: We do not currently model what happens when a symbol is
|
||||
|
|
|
@ -1305,6 +1305,11 @@ void testattr2_b() {
|
|||
TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // expected-warning{{leak}}
|
||||
}
|
||||
|
||||
void testattr2_b_11358224_self_assign_looses_the_leak() {
|
||||
TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit];// expected-warning{{leak}}
|
||||
x = x;
|
||||
}
|
||||
|
||||
void testattr2_c() {
|
||||
TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // no-warning
|
||||
[x release];
|
||||
|
|
Загрузка…
Ссылка в новой задаче