From d967c6a17576b83cdeba656ce10f9676ceb009c0 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 20 Mar 2012 00:10:35 +0000 Subject: [PATCH] Add test case for , which illustrates RetainCount checker working with inlined C++ template functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153069 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Analysis/retain-release.mm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/Analysis/retain-release.mm b/test/Analysis/retain-release.mm index 8c707acfc3..0b550a8e0f 100644 --- a/test/Analysis/retain-release.mm +++ b/test/Analysis/retain-release.mm @@ -321,3 +321,29 @@ void test_Scopy() { NSString *token = (NSString*) Scopy(); [token release]; // expected-warning {{object that is not owned}} } + +//===----------------------------------------------------------------------===// +// Test handling of template functions used to do magic with +// tracked retained pointers. +//===----------------------------------------------------------------------===// + +template T static_objc_cast(U* value) +{ + // ...debugging code omitted... + return static_cast(value); +} + +int rdar10553686(void) +{ + NSObject* bar = static_objc_cast([[NSObject alloc] init]); + [bar release]; + return 0; +} +int rdar10553686_positive(void) +{ + NSObject* bar = static_objc_cast([[NSObject alloc] init]); // expected-warning {{Potential leak}} + [bar release]; + [bar retain]; + return 0; +} + -- 2.40.0