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
52void 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