From: Ted Kremenek Date: Tue, 28 Apr 2009 21:43:40 +0000 (+0000) Subject: Improve retain/release test cases for ownership attributes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c613f4e37558ed392351e08cc1cb52157075c661;p=clang 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 --- 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];