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 | e3f310f3bde06b2c28e067ed54004a562cea245e (patch) | |
| tree | bef2b3b7acaec8e0acae2857aca71ec602b529f0 /clang/test | |
| parent | 002c25602c7ea395739c439c1c9ab0808b13845f (diff) | |
| download | bcm5719-llvm-e3f310f3bde06b2c28e067ed54004a562cea245e.tar.gz bcm5719-llvm-e3f310f3bde06b2c28e067ed54004a562cea245e.zip | |
[analyzer] Check for NULL passed to CFAutorelease.
Patch by Sean McBride, tests adjusted by me.
llvm-svn: 211453
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/ARCMT/objcmt-arc-cf-annotations.m | 46 | ||||
| -rw-r--r-- | clang/test/ARCMT/objcmt-arc-cf-annotations.m.result | 46 | ||||
| -rw-r--r-- | clang/test/Analysis/diagnostics/undef-value-param.m | 2 | ||||
| -rw-r--r-- | clang/test/Analysis/retain-release.m | 46 |
4 files changed, 94 insertions, 46 deletions
diff --git a/clang/test/ARCMT/objcmt-arc-cf-annotations.m b/clang/test/ARCMT/objcmt-arc-cf-annotations.m index 1e063f6e736..c9a5b8215d1 100644 --- a/clang/test/ARCMT/objcmt-arc-cf-annotations.m +++ b/clang/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/clang/test/ARCMT/objcmt-arc-cf-annotations.m.result b/clang/test/ARCMT/objcmt-arc-cf-annotations.m.result index 75dda6ca401..84bc43dcb5c 100644 --- a/clang/test/ARCMT/objcmt-arc-cf-annotations.m.result +++ b/clang/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; } } diff --git a/clang/test/Analysis/diagnostics/undef-value-param.m b/clang/test/Analysis/diagnostics/undef-value-param.m index e977acb70fd..b0ce56caa34 100644 --- a/clang/test/Analysis/diagnostics/undef-value-param.m +++ b/clang/test/Analysis/diagnostics/undef-value-param.m @@ -542,7 +542,7 @@ static void CreateRefUndef(SCDynamicStoreRef *storeRef, unsigned x) { // CHECK-NEXT: </array> // CHECK-NEXT: <key>description</key><string>Null pointer argument in call to CFRelease</string> // CHECK-NEXT: <key>category</key><string>API Misuse (Apple)</string> -// CHECK-NEXT: <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string> +// CHECK-NEXT: <key>type</key><string>null passed to CF memory management function</string> // CHECK-NEXT: <key>issue_context_kind</key><string>Objective-C method</string> // CHECK-NEXT: <key>issue_context</key><string>test</string> // CHECK-NEXT: <key>issue_hash</key><string>5</string> diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m index afe997bf5d4..6973f9bcd67 100644 --- a/clang/test/Analysis/retain-release.m +++ b/clang/test/Analysis/retain-release.m @@ -523,38 +523,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) { + switch (x) { + case 0: CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} - } - else if (x < 0) { + break; + case 1: CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} - } - else { + break; + case 2: CFMakeCollectable(p); // expected-warning{{Null pointer argument in call to CFMakeCollectable}} + break; + case 3: + CFAutorelease(p); // expected-warning{{Null pointer argument in call to CFAutorelease}} + 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; } } @@ -9501,7 +9517,7 @@ id returnNSNull() { // CHECK-NEXT: </array> // CHECK-NEXT: <key>description</key><string>Null pointer argument in call to CFRelease</string> // CHECK-NEXT: <key>category</key><string>API Misuse (Apple)</string> -// CHECK-NEXT: <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string> +// CHECK-NEXT: <key>type</key><string>null passed to CF memory management function</string> // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> // CHECK-NEXT: <key>issue_context</key><string>f16</string> // CHECK-NEXT: <key>issue_hash</key><string>5</string> @@ -9838,7 +9854,7 @@ id returnNSNull() { // CHECK-NEXT: </array> // CHECK-NEXT: <key>description</key><string>Null pointer argument in call to CFRetain</string> // CHECK-NEXT: <key>category</key><string>API Misuse (Apple)</string> -// CHECK-NEXT: <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string> +// CHECK-NEXT: <key>type</key><string>null passed to CF memory management function</string> // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> // CHECK-NEXT: <key>issue_context</key><string>f16</string> // CHECK-NEXT: <key>issue_hash</key><string>8</string> @@ -10175,7 +10191,7 @@ id returnNSNull() { // CHECK-NEXT: </array> // CHECK-NEXT: <key>description</key><string>Null pointer argument in call to CFMakeCollectable</string> // CHECK-NEXT: <key>category</key><string>API Misuse (Apple)</string> -// CHECK-NEXT: <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string> +// CHECK-NEXT: <key>type</key><string>null passed to CF memory management function</string> // CHECK-NEXT: <key>issue_context_kind</key><string>function</string> // CHECK-NEXT: <key>issue_context</key><string>f16</string> // CHECK-NEXT: <key>issue_hash</key><string>11</string> |

