aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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];