1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2 // rdar://13075400 3 4 @protocol FooAsID 5 @property (copy) id foo; // expected-note 2 {{it could also be property of type 'id' declared here}} \\ 6 // expected-warning {{property of type 'id' was selected for synthesis}} 7 @end 8 9 @protocol FooAsDouble 10 @property double foo; // expected-warning 2 {{property of type 'double' was selected for synthesis}} \ 11 // expected-note {{it could also be property of type 'double' declared here}} 12 @end 13 14 @protocol FooAsShort 15 @property short foo; // expected-note {{it could also be property of type 'short' declared here}} 16 @end 17 18 @interface NSObject @end 19 20 @interface AnObject : NSObject<FooAsDouble,FooAsID> 21 @end 22 23 @interface Sub : AnObject 24 @end 25 26 @implementation Sub 27 @synthesize foo=_MyFooIvar; // expected-note {{property synthesized here}} 28 @end 29 30 31 @interface AnotherObject : NSObject<FooAsDouble, FooAsID,FooAsDouble, FooAsID, FooAsDouble,FooAsID> 32 @end 33 34 @implementation AnotherObject 35 @synthesize foo=_MyFooIvar; // expected-note {{property synthesized here}} 36 @end 37 38 39 @interface YetAnotherObject : NSObject<FooAsID,FooAsShort, FooAsDouble,FooAsID, FooAsShort> 40 @end 41 42 @implementation YetAnotherObject 43 @synthesize foo=_MyFooIvar; // expected-note {{property synthesized here}} 44 @end 45 46 double func(YetAnotherObject *object) { 47 return [object foo]; // expected-error {{returning 'id' from a function with incompatible result type 'double'}} 48 } 49