aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-04-28 21:43:40 +0000
committerTed Kremenek <kremenek@apple.com>2009-04-28 21:43:40 +0000
commitc613f4e37558ed392351e08cc1cb52157075c661 (patch)
tree36ff29cc67888981341a353e66016921f51cd7e8
parent5998da5c29dae3f654cb65738ff237203e2222c8 (diff)
Improve retain/release test cases for ownership attributes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70327 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/Analysis/retain-release-gc-only.m22
-rw-r--r--test/Analysis/retain-release.m28
2 files changed, 46 insertions, 4 deletions
diff --git a/test/Analysis/retain-release-gc-only.m b/test/Analysis/retain-release-gc-only.m
index 91f3541ce4..d4871f4de1 100644
--- a/test/Analysis/retain-release-gc-only.m
+++ b/test/Analysis/retain-release-gc-only.m
@@ -152,13 +152,31 @@ void test_attr_3(TestOwnershipAttr *X) {
[str release];
}
-void test_attr_4(TestOwnershipAttr *X) {
+void test_attr_4a(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // no-warning
+}
+
+void test_attr_4b(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // no-warning
+ [X myRelease:str];
+}
+
+void test_attr_4c(TestOwnershipAttr *X) {
NSString *str = [X returnsAnOwnedString]; // no-warning
[X myRetain:str];
[X myRelease:str];
}
-void test_attr_5(TestOwnershipAttr *X) {
+void test_attr_5a(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // no-waring
+}
+
+void test_attr_5b(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString];
+ [X myCFRelease:str]; // expected-warning{{Incorrect decrement of the reference count of an object is not owned at this point by the caller}}
+}
+
+void test_attr_5c(TestOwnershipAttr *X) {
NSString *str = [X returnsAnOwnedString]; // no-warning
[X myCFRetain:str];
[X myCFRelease:str];
diff --git a/test/Analysis/retain-release.m b/test/Analysis/retain-release.m
index ef10ce32b6..20f31dce2d 100644
--- a/test/Analysis/retain-release.m
+++ b/test/Analysis/retain-release.m
@@ -433,13 +433,37 @@ void test_attr_3(TestOwnershipAttr *X) {
[str release];
}
-void test_attr_4(TestOwnershipAttr *X) {
+void test_attr_4a(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}}
+}
+
+void test_attr_4b(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // no-warning
+ [X myRelease:str];
+}
+
+void test_attr_4c(TestOwnershipAttr *X) {
NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}}
[X myRetain:str];
[X myRelease:str];
}
-void test_attr_5(TestOwnershipAttr *X) {
+void test_attr_4d(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString];
+ [X myRelease:str];
+ [X myRelease:str]; // expected-warning{{Reference-counted object is used after it is released}}
+}
+
+void test_attr_5a(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}}
+}
+
+void test_attr_5b(TestOwnershipAttr *X) {
+ NSString *str = [X returnsAnOwnedString]; // no-warning
+ [X myCFRelease:str];
+}
+
+void test_attr_5c(TestOwnershipAttr *X) {
NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}}
[X myCFRetain:str];
[X myCFRelease:str];