Home | History | Annotate | Download | only in SemaObjCXX
      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