diff options
author | Jordan Rose <jordan_rose@apple.com> | 2014-06-21 23:50:40 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2014-06-21 23:50:40 +0000 |
commit | 2597d9fa7dbd4d989955a7b5adaa9c1fc0217df9 (patch) | |
tree | d39cf0f7306ae9c84ee186b30a842fd8efbef6b1 /test/ARCMT | |
parent | 5482ee7f375c872fe948d10fb12e6bea283ff92e (diff) |
[analyzer] Check for NULL passed to CFAutorelease.
Patch by Sean McBride, tests adjusted by me.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211453 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/ARCMT')
-rw-r--r-- | test/ARCMT/objcmt-arc-cf-annotations.m | 46 | ||||
-rw-r--r-- | test/ARCMT/objcmt-arc-cf-annotations.m.result | 46 |
2 files changed, 62 insertions, 30 deletions
diff --git a/test/ARCMT/objcmt-arc-cf-annotations.m b/test/ARCMT/objcmt-arc-cf-annotations.m index 1e063f6e73..c9a5b8215d 100644 --- a/test/ARCMT/objcmt-arc-cf-annotations.m +++ b/test/ARCMT/objcmt-arc-cf-annotations.m @@ -528,38 +528,54 @@ void f15() { CFRelease(*B); // no-warning } -// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable. +// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable/CFAutorelease. void f16(int x, CFTypeRef p) { if (p) return; - if (x > 0) { - CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} - } - else if (x < 0) { - CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} - } - else { - CFMakeCollectable(p); // expected-warning{{Null pointer argument in call to CFMakeCollectable}} + switch (x) { + case 0: + CFRelease(p); + break; + case 1: + CFRetain(p); + break; + case 2: + CFMakeCollectable(p); + break; + case 3: + CFAutorelease(p); + break; + default: + break; } } -// Test that an object is non-null after being CFRetained/CFReleased. +// Test that an object is non-null after CFRetain/CFRelease/CFMakeCollectable/CFAutorelease. void f17(int x, CFTypeRef p) { - if (x > 0) { + switch (x) { + case 0: CFRelease(p); if (!p) CFRelease(0); // no-warning - } - else if (x < 0) { + break; + case 1: CFRetain(p); if (!p) CFRetain(0); // no-warning - } - else { + break; + case 2: CFMakeCollectable(p); if (!p) CFMakeCollectable(0); // no-warning + break; + case 3: + CFAutorelease(p); + if (!p) + CFAutorelease(0); // no-warning + break; + default: + break; } } diff --git a/test/ARCMT/objcmt-arc-cf-annotations.m.result b/test/ARCMT/objcmt-arc-cf-annotations.m.result index 75dda6ca40..84bc43dcb5 100644 --- a/test/ARCMT/objcmt-arc-cf-annotations.m.result +++ b/test/ARCMT/objcmt-arc-cf-annotations.m.result @@ -570,38 +570,54 @@ void f15() { CFRelease(*B); // no-warning } -// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable. +// Test when we pass NULL to CFRetain/CFRelease/CFMakeCollectable/CFAutorelease. void f16(int x, CFTypeRef p) { if (p) return; - if (x > 0) { - CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} - } - else if (x < 0) { - CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} - } - else { - CFMakeCollectable(p); // expected-warning{{Null pointer argument in call to CFMakeCollectable}} + switch (x) { + case 0: + CFRelease(p); + break; + case 1: + CFRetain(p); + break; + case 2: + CFMakeCollectable(p); + break; + case 3: + CFAutorelease(p); + break; + default: + break; } } -// Test that an object is non-null after being CFRetained/CFReleased. +// Test that an object is non-null after CFRetain/CFRelease/CFMakeCollectable/CFAutorelease. void f17(int x, CFTypeRef p) { - if (x > 0) { + switch (x) { + case 0: CFRelease(p); if (!p) CFRelease(0); // no-warning - } - else if (x < 0) { + break; + case 1: CFRetain(p); if (!p) CFRetain(0); // no-warning - } - else { + break; + case 2: CFMakeCollectable(p); if (!p) CFMakeCollectable(0); // no-warning + break; + case 3: + CFAutorelease(p); + if (!p) + CFAutorelease(0); // no-warning + break; + default: + break; } } |