diff options
Diffstat (limited to 'clang/test/SemaObjC')
-rw-r--r-- | clang/test/SemaObjC/attr-objc-gc.m | 6 | ||||
-rw-r--r-- | clang/test/SemaObjC/mrc-weak.m | 67 | ||||
-rw-r--r-- | clang/test/SemaObjC/no-gc-weak-test.m | 9 | ||||
-rw-r--r-- | clang/test/SemaObjC/nonarc-weak.m | 16 | ||||
-rw-r--r-- | clang/test/SemaObjC/property-in-class-extension-1.m | 4 | ||||
-rw-r--r-- | clang/test/SemaObjC/synthesized-ivar.m | 2 |
6 files changed, 77 insertions, 27 deletions
diff --git a/clang/test/SemaObjC/attr-objc-gc.m b/clang/test/SemaObjC/attr-objc-gc.m index 827945c668c..303dce0d875 100644 --- a/clang/test/SemaObjC/attr-objc-gc.m +++ b/clang/test/SemaObjC/attr-objc-gc.m @@ -9,13 +9,13 @@ static id __attribute((objc_gc(hello))) f; // expected-warning{{'objc_gc' attrib static int __attribute__((objc_gc(weak))) g; // expected-warning {{'objc_gc' only applies to pointer types; type here is 'int'}} -static __weak int h; // expected-warning {{'__weak' only applies to pointer types; type here is 'int'}} +static __weak int h; // expected-warning {{'__weak' only applies to Objective-C object or block pointer types; type here is 'int'}} // TODO: it would be great if this reported as __weak #define WEAK __weak -static WEAK int h; // expected-warning {{'objc_gc' only applies to pointer types; type here is 'int'}} +static WEAK int h; // expected-warning {{'objc_ownership' only applies to Objective-C object or block pointer types; type here is 'int'}} -/* expected-warning {{'__weak' only applies to pointer types; type here is 'int'}}*/ static __we\ +/* expected-warning {{'__weak' only applies to Objective-C object or block pointer types; type here is 'int'}}*/ static __we\ ak int i; // rdar://problem/9126213 diff --git a/clang/test/SemaObjC/mrc-weak.m b/clang/test/SemaObjC/mrc-weak.m new file mode 100644 index 00000000000..ec03cf7f002 --- /dev/null +++ b/clang/test/SemaObjC/mrc-weak.m @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -fobjc-runtime-has-weak -fobjc-weak -fsyntax-only -verify %s + +__attribute__((objc_root_class)) +@interface A +@property (weak) id wa; // expected-note {{property declared here}} +@property (weak) id wb; +@property (weak) id wc; // expected-note {{property declared here}} +@property (weak) id wd; +@property (unsafe_unretained) id ua; +@property (unsafe_unretained) id ub; // expected-note {{property declared here}} +@property (unsafe_unretained) id uc; +@property (unsafe_unretained) id ud; +@property (strong) id sa; +@property (strong) id sb; // expected-note {{property declared here}} +@property (strong) id sc; // expected-note {{property declared here}} +@property (strong) id sd; +@end + +@implementation A { + id _wa; // expected-error {{existing instance variable '_wa' for __weak property 'wa' must be __weak}} + __weak id _wb; + __unsafe_unretained id _wc; // expected-error {{existing instance variable '_wc' for __weak property 'wc' must be __weak}} + id _ua; + __weak id _ub; // expected-error {{existing instance variable '_ub' for property 'ub' with unsafe_unretained attribute must be __unsafe_unretained}} + __unsafe_unretained id _uc; + id _sa; + __weak id _sb; // expected-error {{existing instance variable '_sb' for strong property 'sb' may not be __weak}} + __unsafe_unretained id _sc; // expected-error {{existing instance variable '_sc' for strong property 'sc' may not be __unsafe_unretained}} +} +@synthesize wa = _wa; // expected-note {{property synthesized here}} +@synthesize wb = _wb; +@synthesize wc = _wc; // expected-note {{property synthesized here}} +@synthesize wd = _wd; +@synthesize ua = _ua; +@synthesize ub = _ub; // expected-note {{property synthesized here}} +@synthesize uc = _uc; +@synthesize ud = _ud; +@synthesize sa = _sa; +@synthesize sb = _sb; // expected-note {{property synthesized here}} +@synthesize sc = _sc; // expected-note {{property synthesized here}} +@synthesize sd = _sd; +@end + +void test_goto() { + goto after; // expected-error {{cannot jump from this goto statement to its label}} + __weak id x; // expected-note {{jump bypasses initialization of __weak variable}}} +after: + return; +} + +void test_weak_cast(id *value) { + __weak id *a = (__weak id*) value; + id *b = (__weak id*) value; // expected-error {{initializing 'id *' with an expression of type '__weak id *' changes retain/release properties of pointer}} + __weak id *c = (id*) value; // expected-error {{initializing '__weak id *' with an expression of type 'id *' changes retain/release properties of pointer}} +} + +void test_unsafe_unretained_cast(id *value) { + __unsafe_unretained id *a = (__unsafe_unretained id*) value; + id *b = (__unsafe_unretained id*) value; + __unsafe_unretained id *c = (id*) value; +} + +void test_cast_qualifier_inference(__weak id *value) { + __weak id *a = (id*) value; + __unsafe_unretained id *b = (id*) value; // expected-error {{initializing '__unsafe_unretained id *' with an expression of type '__weak id *' changes retain/release properties of pointer}} +} + diff --git a/clang/test/SemaObjC/no-gc-weak-test.m b/clang/test/SemaObjC/no-gc-weak-test.m index 6539a9b7f14..287b4db8cef 100644 --- a/clang/test/SemaObjC/no-gc-weak-test.m +++ b/clang/test/SemaObjC/no-gc-weak-test.m @@ -1,11 +1,10 @@ // RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify -Wno-objc-root-class %s -// expected-no-diagnostics @interface Subtask { id _delegate; } -@property(nonatomic,readwrite,assign) id __weak delegate; +@property(nonatomic,readwrite,assign) id __weak delegate; // expected-error {{the current deployment target does not support automated __weak references}} @end @implementation Subtask @@ -15,15 +14,15 @@ @interface PVSelectionOverlayView2 { - id __weak _selectionRect; + id __weak _selectionRect; // expected-error {{the current deployment target does not support automated __weak references}} expected-error {{existing instance variable '_selectionRect' for property 'selectionRect' with assign attribute must be __unsafe_unretained}} } -@property(assign) id selectionRect; +@property(assign) id selectionRect; // expected-note {{property declared here}} @end @implementation PVSelectionOverlayView2 -@synthesize selectionRect = _selectionRect; +@synthesize selectionRect = _selectionRect; // expected-note {{property synthesized here}} @end diff --git a/clang/test/SemaObjC/nonarc-weak.m b/clang/test/SemaObjC/nonarc-weak.m deleted file mode 100644 index ab51875de1c..00000000000 --- a/clang/test/SemaObjC/nonarc-weak.m +++ /dev/null @@ -1,16 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macosx10.8.0 -fobjc-runtime=macosx-10.8.0 -fsyntax-only -Wunused-function %s > %t.nonarc 2>&1 -// RUN: %clang_cc1 -triple x86_64-apple-macosx10.8.0 -fobjc-runtime=macosx-10.8.0 -fsyntax-only -Wunused-function -fobjc-arc %s > %t.arc 2>&1 -// RUN: FileCheck -input-file=%t.nonarc %s -// RUN: FileCheck -input-file=%t.arc -check-prefix=ARC %s - -static void bar() {} // Intentionally unused. - -void foo(id self) { - __weak id weakSelf = self; -} - -// CHECK: 9:13: warning: __weak attribute cannot be specified on an automatic variable when ARC is not enabled -// CHECK: 6:13: warning: unused function 'bar' -// CHECK: 2 warnings generated -// ARC: 6:13: warning: unused function 'bar' -// ARC: 1 warning generated diff --git a/clang/test/SemaObjC/property-in-class-extension-1.m b/clang/test/SemaObjC/property-in-class-extension-1.m index ab461ef6c19..6e9d476c18a 100644 --- a/clang/test/SemaObjC/property-in-class-extension-1.m +++ b/clang/test/SemaObjC/property-in-class-extension-1.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -verify -Weverything %s -// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -verify -Weverything %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fobjc-weak -verify -Weverything -Wno-objc-weak-compat %s +// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fobjc-weak -fsyntax-only -verify -Weverything -Wno-objc-weak-compat %s // rdar://12103400 @class NSString; diff --git a/clang/test/SemaObjC/synthesized-ivar.m b/clang/test/SemaObjC/synthesized-ivar.m index 884a3caf0f6..cc7b309da03 100644 --- a/clang/test/SemaObjC/synthesized-ivar.m +++ b/clang/test/SemaObjC/synthesized-ivar.m @@ -57,5 +57,5 @@ int f0(I *a) { return a->IP; } // expected-error {{instance variable 'IP' is pri @implementation A // rdar://9605088 -@synthesize testObjectWeakProperty; // expected-error {{@synthesize of 'weak' property is only allowed in ARC or GC mode}} +@synthesize testObjectWeakProperty; // expected-error {{the current deployment target does not support automated __weak references}} @end |