1 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -verify %s 2 // rdar://9340606 3 4 @interface Foo { 5 @public 6 id __unsafe_unretained x; 7 id __weak y; 8 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 9 } 10 @property(strong) id x; 11 @property(strong) id y; 12 @property(strong) id z; 13 @end 14 15 @interface Bar { 16 @public 17 id __unsafe_unretained x; 18 id __weak y; 19 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 20 } 21 @property(retain) id x; 22 @property(retain) id y; 23 @property(retain) id z; 24 @end 25 26 @interface Bas { 27 @public 28 id __unsafe_unretained x; 29 id __weak y; 30 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 31 } 32 @property(copy) id x; 33 @property(copy) id y; 34 @property(copy) id z; 35 @end 36 37 // Errors should start about here :-) 38 39 @interface Bat 40 @property(strong) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 41 @property(strong) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}} 42 @property(strong) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 43 @end 44 45 @interface Bau 46 @property(retain) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 47 @property(retain) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}} 48 @property(retain) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 49 @end 50 51 @interface Bav 52 @property(copy) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 53 @property(copy) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}} 54 @property(copy) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 55 @end 56 57 @interface Bingo 58 @property(assign) __unsafe_unretained id x; 59 @property(assign) __weak id y; // expected-error {{unsafe_unretained property 'y' may not also be declared __weak}} 60 @property(assign) __autoreleasing id z; // expected-error {{unsafe_unretained property 'z' may not also be declared __autoreleasing}} 61 @end 62 63 @interface Batman 64 @property(unsafe_unretained) __unsafe_unretained id x; 65 @property(unsafe_unretained) __weak id y; // expected-error {{unsafe_unretained property 'y' may not also be declared __weak}} 66 @property(unsafe_unretained) __autoreleasing id z; // expected-error {{unsafe_unretained property 'z' may not also be declared __autoreleasing}} 67 @end 68 69 // rdar://9396329 70 @interface Super 71 @property (readonly, retain) id foo; 72 @property (readonly, weak) id fee; 73 @property (readonly, strong) id frr; 74 @end 75 76 @interface Bugg : Super 77 @property (readwrite) id foo; 78 @property (readwrite) id fee; 79 @property (readwrite) id frr; 80 @end 81 82 // rdar://20152386 83 // rdar://20383235 84 85 @interface NSObject @end 86 87 #pragma clang assume_nonnull begin 88 @interface I: NSObject 89 @property(nonatomic, weak) id delegate; // Do not warn, nullable is inferred. 90 @property(nonatomic, weak, readonly) id ROdelegate; // Do not warn, nullable is inferred. 91 @property(nonatomic, weak, nonnull) id NonNulldelete; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}} 92 @property(nonatomic, weak, nullable) id Nullabledelete; // do not warn 93 94 // strong cases. 95 @property(nonatomic, strong) id stdelegate; // Do not warn 96 @property(nonatomic, readonly) id stROdelegate; // Do not warn 97 @property(nonatomic, strong, nonnull) id stNonNulldelete; // Do not warn 98 @property(nonatomic, nullable) id stNullabledelete; // do not warn 99 @end 100 #pragma clang assume_nonnull end 101 102 @interface J: NSObject 103 @property(nonatomic, weak) id ddd; // Do not warn, nullable is inferred. 104 @property(nonatomic, weak, nonnull) id delegate; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}} 105 @property(nonatomic, weak, nonnull, readonly) id ROdelegate; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}} 106 @end 107 108 // rdar://problem/23931441 109 @protocol P 110 @property(readonly, retain) id prop; 111 @end 112 113 __attribute__((objc_root_class)) 114 @interface I2<P> 115 @end 116 117 @interface I2() 118 @property (readwrite) id prop; 119 @end 120 121 @implementation I2 122 @synthesize prop; 123 @end 124