Clang Project

clang_source_code/test/SemaObjCXX/protocol-lookup.mm
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