diff options
Diffstat (limited to 'test/SemaObjC/arc-objc-lifetime.m')
-rw-r--r-- | test/SemaObjC/arc-objc-lifetime.m | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/test/SemaObjC/arc-objc-lifetime.m b/test/SemaObjC/arc-objc-lifetime.m index 08d2dbe..5e25253 100644 --- a/test/SemaObjC/arc-objc-lifetime.m +++ b/test/SemaObjC/arc-objc-lifetime.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -Wexplicit-ownership-type -verify -Wno-objc-root-class %s -// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -Wexplicit-ownership-type -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -fobjc-runtime-has-weak -Wexplicit-ownership-type -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -fblocks -fobjc-runtime-has-weak -Wexplicit-ownership-type -verify -Wno-objc-root-class %s // rdar://10244607 typedef const struct __CFString * CFStringRef; @@ -67,3 +67,61 @@ typedef void (^T) (); - (void)createInferiorTransportAndSetEnvironment:(NSMutableDictionary*)environment error:(__autoreleasing NSError**)error {} @end +// <rdar://problem/12367446> +typedef __strong id strong_id; +typedef NSObject *NSObject_ptr; +typedef __strong NSObject *strong_NSObject_ptr; + +// Warn +__strong id f1(); // expected-warning{{ARC __strong lifetime qualifier on return type is ignored}} +NSObject __unsafe_unretained *f2(int); // expected-warning{{ARC __unsafe_unretained lifetime qualifier on return type is ignored}} +__autoreleasing NSObject *f3(void); // expected-warning{{ARC __autoreleasing lifetime qualifier on return type is ignored}} +NSObject * __strong f4(void); // expected-warning{{ARC __strong lifetime qualifier on return type is ignored}} +NSObject_ptr __strong f5(); // expected-warning{{ARC __strong lifetime qualifier on return type is ignored}} + +typedef __strong id (*fptr)(int); // expected-warning{{ARC __strong lifetime qualifier on return type is ignored}} + +// Don't warn +strong_id f6(); +strong_NSObject_ptr f7(); +typedef __strong id (^block_ptr)(int); + +// rdar://10127067 +void test8_a() { + __weak id *(^myBlock)(void); + __weak id *var = myBlock(); + (void) (__strong id *) &myBlock; + (void) (__weak id *) &myBlock; // expected-error {{cast}} +} +void test8_b() { + __weak id (^myBlock)(void); + (void) (__weak id *) &myBlock; + (void) (__strong id *) &myBlock; // expected-error {{cast}} +} +void test8_c() { + __weak id (^*(^myBlock)(void))(void); + (void) (__weak id*) myBlock(); + (void) (__strong id*) myBlock(); // expected-error {{cast}} + (void) (__weak id*) &myBlock; // expected-error {{cast}} + (void) (__strong id*) &myBlock; +} + +@class Test9; +void test9_a() { + __weak Test9 **(^myBlock)(void); + __weak Test9 **var = myBlock(); + (void) (__strong Test9 **) &myBlock; + (void) (__weak Test9 **) &myBlock; // expected-error {{cast}} +} +void test9_b() { + __weak Test9 *(^myBlock)(void); + (void) (__weak Test9**) &myBlock; + (void) (__strong Test9**) &myBlock; // expected-error {{cast}} +} +void test9_c() { + __weak Test9 *(^*(^myBlock)(void))(void); + (void) (__weak Test9 **) myBlock(); + (void) (__strong Test9 **) myBlock(); // expected-error {{cast}} + (void) (__weak Test9 **) &myBlock; // expected-error {{cast}} + (void) (__strong Test9 **) &myBlock; +} |