1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 @protocol NSObject 3 - retain; 4 - release; 5 @end 6 7 @interface NSObject 8 - init; 9 - dealloc; 10 @end 11 12 @protocol Foo <NSObject> 13 @end 14 15 @protocol Bar <Foo> 16 @end 17 18 @interface Baz : NSObject { 19 id <Foo> _foo; 20 id <Bar> _bar; 21 } 22 - (id)initWithFoo:(id <Foo>)foo bar:(id <Bar>)bar; 23 @end 24 25 @implementation Baz 26 27 - (id)init 28 { 29 return [self initWithFoo:0 bar:0]; 30 } 31 32 - (id)initWithFoo:(id <Foo>)foo bar:(id <Bar>)bar 33 { 34 self = [super init]; 35 if (self != 0) { 36 _foo = [foo retain]; 37 _bar = [bar retain]; 38 } 39 return self; 40 } 41 42 - dealloc 43 { 44 [_foo release]; 45 [_bar release]; 46 [super dealloc]; 47 return 0; 48 } 49 50 @end 51 52 void rdar8575095(id a) { 53 [id<NSObject>(a) retain]; 54 id<NSObject> x(id<NSObject>(0)); 55 id<NSObject> x2(id<NSObject>(y)); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}} 56 } 57