|  | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
|  |  | 
|  | @interface B | 
|  | +(int) classGetter; | 
|  | -(int) getter; | 
|  | @end | 
|  |  | 
|  | @interface A : B | 
|  | @end | 
|  |  | 
|  | @implementation A | 
|  | +(int) classGetter { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | +(int) classGetter2 { | 
|  | return super.classGetter; | 
|  | } | 
|  |  | 
|  | -(void) method { | 
|  | int x = super.getter; | 
|  | } | 
|  | @end | 
|  |  | 
|  | void f0() { | 
|  | // FIXME: not implemented yet. | 
|  | //int l1 = A.classGetter; | 
|  | int l2 = [A classGetter2]; | 
|  | } | 
|  |  | 
|  | // rdar://13349296 | 
|  | __attribute__((objc_root_class)) @interface ClassBase | 
|  | @property (nonatomic, retain) ClassBase * foo; // expected-note {{property declared here}} | 
|  | @end | 
|  |  | 
|  | @implementation ClassBase | 
|  | - (void) Meth:(ClassBase*)foo { | 
|  | super.foo = foo; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}} | 
|  | [super setFoo:foo]; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}} | 
|  | } | 
|  | @end | 
|  |  | 
|  | @interface ClassDerived : ClassBase | 
|  | @property (nonatomic, retain) ClassDerived * foo; // expected-warning {{auto property synthesis will not synthesize property 'foo'; it will be implemented by its superclass}} | 
|  | @end | 
|  |  | 
|  | @implementation ClassDerived // expected-note {{detected while default synthesizing properties in class implementation}} | 
|  | - (void) Meth:(ClassBase*)foo { | 
|  | super.foo = foo; // must work with no warning | 
|  | [super setFoo:foo]; // works with no warning | 
|  | } | 
|  | @end | 
|  |  | 
|  | @implementation IFaceNotFound (Foo) // expected-error {{cannot find interface declaration for 'IFaceNotFound'}} | 
|  | -(int) foo { | 
|  | return super.foo; // expected-error {{expected identifier or '('}} | 
|  | } | 
|  | @end |